首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从Windows窗体应用程序打开另一个线程中的WPF窗口

从Windows窗体应用程序打开另一个线程中的WPF窗口,可以通过以下步骤实现:

  1. 首先,在Windows窗体应用程序中创建一个新的线程,并在该线程中加载WPF窗口。
代码语言:csharp
复制
Thread wpfThread = new Thread(() =>
{
    SynchronizationContext.SetSynchronizationContext(new DispatcherSynchronizationContext(Dispatcher.CurrentDispatcher));
    var wpfWindow = new MyWPFWindow();
    wpfWindow.Show();
    Dispatcher.Run();
});
wpfThread.SetApartmentState(ApartmentState.STA);
wpfThread.IsBackground = true;
wpfThread.Start();
  1. 在WPF窗口的关闭事件中,调用Dispatcher.ExitAllFrames()方法以退出消息循环。
代码语言:csharp
复制
private void Window_Closed(object sender, EventArgs e)
{
    Dispatcher.ExitAllFrames();
}
  1. 在Windows窗体应用程序中,可以通过Invoke或BeginInvoke方法在WPF窗口的线程中执行操作。
代码语言:csharp
复制
wpfWindow.Dispatcher.Invoke(() =>
{
    // 在WPF窗口的线程中执行操作
});

通过以上步骤,可以实现从Windows窗体应用程序打开另一个线程中的WPF窗口,并在两者之间进行线程间通信。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Windows wpf(下载应用介绍教程)

一、窗体类基本概念     对于WPF应用程序,在Visual Studio和Expression Blend,自定义窗体均继承System.Windows.Window类。...独立 WPF 应用程序使用 Window 类来提供它们自己窗口。在 WPF ,可以使用代码或 XAML 标记来实现窗口外观和行为。...显示窗体 构造函数 Show()、ShowDialog()方法:Show()方法显示非模态窗口,这意味着应用程序所运行模式允许用户在同一个应用程序激活其他窗口。...记住这一点,在引发 ContentRendered 时,便可认为窗口打开。      窗口变为活动窗口之后,用户可以在同一个应用程序激活其他窗口,还可以激活其他应用程序。...image.png WPF窗体详细属性、方法、事件请参考MSDN,有很多属性、方法、事件与Windows应用程序 System.Windows.Forms.Form类颇为相似。

1.2K20

WPF 同一窗口线程多进程 UI(使用 SetParent 嵌入另一个窗口

WPF 同一窗口线程/多进程 UI(使用 SetParent 嵌入另一个窗口) 发布于 2018-07-11 13:35...如果希望做不同线程 UI,大家也会想到使用另一个窗口来实现,让每个窗口拥有自己 UI 线程。然而,就不能让同一个窗口内部使用多个 UI 线程吗?...---- WPF 同一个窗口中跨线程访问 UI 有多种方法: 使用 VisualTarget (本文) 使用 SetParent 嵌入另一个窗口 前者使用WPF 原生方式,做出来线程 UI 可以和原来...呃……就是 Windows 自诞生以来那种传统。在传统 Win32 应用程序,每一个控件都有自己窗口句柄,它们之间通过 SetParent 进行连接;可以说一个 Button 就是一个窗口。...这是 WPF 窗口刚刚获得 Windows 窗口句柄时机,在此事件,我们可以最早地拿到窗口句柄以便进行 Win32 函数调用。

4K10

在Office应用打开WPF窗体并且让子窗体显示在Office应用上

在.NET主程序,我们可以通过创建 ExcelApplication 对象来打开一个Excel应用程序,如果我们想在Excle里面再打开WPF窗口,问题就不那么简单了。...我们可以简单实例化一个WPF窗体对象然后在Office应用程序窗体打开这个新WPF窗体,此时Office应用窗体就是WPF宿主窗体。...然后宿主窗体跟Office应用并不是在一个UI线程上,子窗体很可能会在宿主窗体后面看不到。...窗体是托管程序,.NET提供了一个 WindowInteropHelper 包装类,它可以将一个托管程序窗体包装得到一个窗口句柄,之后,就可以调用上面的Win32函数 SetParent 设置窗口父子关系了...下面方法是一个完整方法,可以通过反射实例化一个WPF窗体对象,然后设置此WPF窗体对象为Office应用程序窗体,并正常显示在Office应用程序上。

1.6K50

【愚公系列】2023年11月 WPF控件专题 2023秋招WPF高频面试题

除了像Winform那样在“Windows 窗体”上删除控件之外,WPF 还为应用程序开发提供了额外功能改善,包括丰富用户界面、动画等等。...Dispatcher: 一个抽象基类,用于绑定到一个线程类。与Windows窗体类似,WPF也要求仅从创建线程调用方法和属性。...WPF应用程序使用为人熟知线程亲和(Single-Thread Affinity,STA)模型,这意味着整个用户界面由单个线程拥有。另一个线程与用户界面进行交互是不安全。...Windows 窗体或多或少是 Win32/MFC 之上轻量级包装器,这意味着它在 .NET 可扩展性并非在所有情况下都那么好。 WPF 是一个从头开始实现新 UI 框架。...23.说出使用WPF而不是Windows窗体一些优点使用 WPF 代替 Windows 窗体优点: XAML 使更容易创建和编辑 GUI,并允许在设计模式 (XAML) 和后台代码(C#、VB.NET

44622

C#各种定时器Timer类区别与使用介绍

Windows Forms Timer) 2、System.Windows.Threading.DispatcherTimer(WPF timer); 计时器最宜用于 Windows 窗体应用程序,...并且必须在窗口中使用,适用于单线程环境, 在此环境, UI 线程用于执行处理。...Windows 窗体计时器组件是单线程, 且限制为55毫秒准确度,准确性不高 多线程计时器比较强大,精确,而且可扩展性强; 单线程计时器比较安全,对于更新 Windows Forms controls...在WPFWindows Forms安全调用方法SynchronizingObject对象。...(WPF timer); 单线程计时器是被设计成属于他们执行环境计时器,如果你在一个Windows服务应用程序中使用Windows FormsTimer,timer 事件并不会被触发,只有在对应环境下才会被触发

3.4K20

将浏览器嵌入 .NET 应用程序:DotNetBrowser 还是 CefSharp?

架构 在 CefSharp ,Chromium 引擎直接在您 .NET 进程初始化[4]。初始化和关闭都必须在主应用程序线程(通常是 UI 线程执行。在不同线程调用它们通常会导致冻结。...Chromium 漏洞保留在 Chromium 。 Visual Studio设计器 现代 WPFWindows 窗体应用程序通常是在设计器帮助下在 Visual Studio 创建。...安装 NuGet 包或 VSIX 扩展后,BrowserView 控件出现在工具箱。它可以像任何其他常规 UI 控件一样被拖到窗体窗口上。...嵌入应用程序 UI CefSharp 提供 WPFWindows 窗体支持。但是,它 WPF 实现只能在离屏渲染模式[13]下工作。此实现具有有限触摸屏和 IME[14] 支持。...DotNetBrowser 在两种渲染模式下同时支持 WPFWindows 窗体。在硬件加速模式下,触摸、手势和 IME 由 Chromium 自行处理,因此它们开箱即用。

46520

winform和WPF那点事~

2、WPF定义:   WPFWindows Presentation Foundation)是微软推出基于Windows 用户界面框架,属于.NET Framework 3.0一部分。...,以创建丰富基于Windows应用程序 使用安全:Windows窗体充分利用公共语言运行库安全特性。...数据管理:方便数据显示和操作:应用程序开发中最常见情形之一是在窗体上显示数据。Windows窗体对数据库处理提供全面支持。可以访问数据库数据,并在窗体上显示和操作数据。...WPF基于directX,所以对于3D处理更好,画面也更加酷炫。 winform画面设计采用与开发语言相同语言实现,并保存在相同代码类型文件,移植性不好。...应用就是一般窗口应用,浏览应用就是象网页一样一页一页应用,文档应用是用来显示内容浏览应用功能子集,而不是MVC模型。 一般应用其实也就是每个页面拥有一个独立窗口

4.5K20

【炫丽】0开始做一个WPF+Blazor对话小程序

WPF默认程序 本文创建WPF Hello World开发: 使用WPF模板创建一个默认程序,取名【WPFBlazorChat】,项目组织结构如下: 空白WPF项目 运行项目,一个空白窗口WPF...默认窗体边框,运行程序如下: 隐藏WPF默认窗体边框 看上图,点击窗体按钮(其实是Razor组件按钮),但未执行按钮点击事件,且窗体消失了,这是怎么回事?...窗体圆角 在后面的3.4小节,站长使用一个第三库实现了窗体圆角问题,更多比较好WPF自定义窗体实现可看这篇文章:WPF三种自定义窗体实现[9],本小节示例源码在这WPF自定义窗体[10]。...在RazorViews\MainView.razor执行按钮点击,发送打开窗体消息: ......代码结构 下面是最后示例效果图,前面部分文章已经发过,再发一次,哈哈: 用户列表窗口 用户列表 打开窗口 打开窗口 聊天窗口 聊天窗口 演示发送消息 7.

10.2K20

python Tutorial

Windows 应用, 这通常要求 delegates 和 event 处理 (i.e., 向现有的form窗口添加按钮,然后对按钮添加按下处理功能代码).      ...本tutorial 专注于在IronPython 创建 delegates, 事件处理, 以及使用Windows窗体创建 Windows应用和WPF(以前Avalon).      ...阅读完本tutorial估计耗时: 25 分钟       本tutorial 目标就是了解如何在IronPython创建 delegates 和事件处理代码, 以及通过Windows 窗体WPF...默认情况下, Python 控制台运行在单一线程下. 当线程等待控制台窗口输入文本时, 被控制台动态创建Windows 应用不能处理 Windows消息....现在设置窗体Text 属性: f.Text = "My First Interactive Application" 在运行应用程序, 注意form 单击事件.

1.6K50

将浏览器嵌入 .NET 应用程序:DotNetBrowser 还是 CefSharp?

架构 在 CefSharp ,Chromium 引擎直接在您 .NET 进程初始化[4]。初始化和关闭都必须在主应用程序线程(通常是 UI 线程执行。在不同线程调用它们通常会导致冻结。...其中之一是让您应用程序始终在 32 位模式下运行,另一个更复杂,需要修改项目文件(.csproj 或 .vbproj)和代码。 在 DotNetBrowser ,AnyCPU 支持开箱即用。...Chromium 漏洞保留在 Chromium 。 Visual Studio设计器 现代 WPFWindows 窗体应用程序通常是在设计器帮助下在 Visual Studio 创建。...它可以像任何其他常规 UI 控件一样被拖到窗体窗口上。 嵌入应用程序 UI CefSharp 提供 WPFWindows 窗体支持。...但是,它 WPF 实现只能在 离屏渲染模式[13] 下工作。此实现具有有限触摸屏和IME[14]支持。 DotNetBrowser 在两种渲染模式下同时支持 WPFWindows 窗体

41140

WPF消息机制(二)- WPF内部5个窗口之隐藏消息窗口

目录 WPF消息机制(一)-让应用程序动起来 WPF消息机制(二)-WPF内部5个窗口 (1)隐藏消息窗口 (2)处理激活和关闭消息窗口和系统资源通知窗口 (3)用于用户交互可见窗口 (4)...用于UI窗口绘制可见窗口 WPF消息机制(三)-WPF输入事件来源 WPF消息机制(四)-WPFUI更新 WPF内部5个窗口 对于Windows系统来说,它是一个消息系统,消息系统核心就是窗口...在上一篇,我们频繁提及“线程”,“Dispatcher”其实,运行WPF应用程序所在线程就是WPF所谓UI线程,在Application.Run之后,调用Dispatcher.Run时会检查当前线程是否已经存在了一个...“窗体”,“Handle”,“WndProc”呢?...通常情况下,一个WPF应用程序在运行起来时候,后台会创建5个Win32窗口,帮助WPF系统来处理操作系统以及应用程序内部消息。

1.8K50

【炫丽】0开始做一个WPF+Blazor对话小程序

WPF默认程序本文创建WPF Hello World开发:使用WPF模板创建一个默认程序,取名【WPFBlazorChat】,项目组织结构如下:运行项目,一个空白窗口:接着往下看,我们添加Blazor...在后面的3.4小节,站长使用一个第三库实现了窗体圆角问题,更多比较好WPF自定义窗体实现可看这篇文章:WPF三种自定义窗体实现,本小节示例源码在这WPF自定义窗体。...3.2 WPF异形窗体异形窗体需求,使用WPF实现是比较方便,本来打算写写,感觉偏离主题太远了,给篇文章自行看看吧:WPF异形窗体演示,文中异形窗体效果如下:下面介绍将窗体标题栏也放Razor组件实现方式...在RazorViews\MainView.razor执行按钮点击,发送打开窗体消息:......,前面部分文章已经发过,再发一次,哈哈:用户列表窗口打开窗口聊天窗口演示发送消息7.

8K60

虚拟桌宠模拟器:VPet-Simulator,一个开源桌宠软件

虚拟桌宠模拟器:VPet-Simulator,一个开源桌宠软件, 可以内置到任何WPF应用程序虚拟桌宠模拟器 一个开源桌宠软件, 可以内置到任何WPF应用程序图片获取虚拟桌宠模拟器 OnSteam(...免费) 或 通过Nuget内置到你WPF应用程序1.虚拟桌宠模拟器 详细介绍虚拟桌宠模拟器是一款桌宠软件,支持各种互动投喂等....Function 功能性代码存放位置CoreMOD Mod管理类MWController 窗体控制器*WinDesign 窗口和UI设计winBetterBuy 更好买窗口winCGPTSetting...CorePetHelper 快速切换小标VPet-Simulator.Tool: 方便制作MOD工具(eg:图片帧生成)VPet-Simulator.Core: 软件核心 方便内置到任何WPF应用程序...MessageBar 人物说话时候说话栏WorkTimer 工作时钟5.桌面端部署方法下载本项目, 通过VisualStudio打开 VPet.sln 文件在生成栏, 选择 位数为 x64 和生成项目为

73100

使用.NET Core 构建现代化桌面应用

我们今天要聊内容主要桌面开发四个方面:Windows平台、.NET Core 3 平台上WPF,Winform, 应用打包解决方案 MSIX 和 XAML 群岛访问原来UWP控件,让我们应用程序迅速现代化...NET Core 3 是 .NET Core 下一主要版本。 这个即将发行版本主要特点是支持 Windows 桌面应用,包括 Windows 窗体WPF 应用。...托管在 XAML 岛 UWP 控件也可在面向 .NET Core 3 Windows 窗体WPF 应用中使用。....NET Core 性能更好,速度更快,.NET Core并行安装特性可以帮助你在发布应用程序获取显而易见方便,更好打包方案MSIX, 开源,支持.NET Standard 2.1, 支持C...开始,可以将 UWP XAML 控件直接添加到与窗口句柄 (HWND) 关联 WPFWindows 窗体或 C++ Win32 应用任何 UI 元素。

2.2K10

Qt 第一步 HelloWorld 第一个程序

开始写Qt 相关文章主要原因是,我本人在编写一个视频录制及相关处理项目,写到一半发现.net winform 相关UI处理限制较大;虽然我也可以使用WPF 进行编写,但是我本人并没有接触过WPF...[在这里插入图片描述] 在出现窗体,项目选择 Application 应用程序,在中间内容部分,选择 Qt Widgets Application。...为当前主窗口界面文件,双击打开: [在这里插入图片描述] 如图所示,左侧当前区域显示为设计,这时将可以设计当前主窗口UI界面,在左侧小部件中找到lable 标签拖拽至设计窗体。...[在这里插入图片描述] 双击label标签(在windows设计窗体上显示为TextLable),输入内容为HelloWorld: [在这里插入图片描述] 当然我们也可以更改字体大小,在右下角属性面板...点击左下角绿色运行按钮即可运行当前编辑好窗体应用程序: [在这里插入图片描述] 假设出现保存修改提示,点击 Save All 保存所有即可(但是要确定自己是否做过修改还是无意触碰修改了某些值),之后等待项目构件

61310

WPF 弹出 popup 里面的 TextBox 无法输入汉字 修复在 Popup 输入法不跟随在 WinForms 弹出 WPF TextBox 无法输入问题

因为 Popup 句柄具有 WS_EX_NOACTIVATE 特性,所以 Popup 是无法获得焦点。在微软系统,所有的窗口、控件都是有句柄,句柄就是一个指针,获得他才知道是哪个控件。...代码 ThePopup 就是需要打开。...传入 WPF 就可以 Window winWPF = new Window();  //WinWPF为想要显示WPF窗体。...);  WPF 禁用TextBox触摸后自动弹出虚拟键盘 - 唐宋元明清2188 - 博客园 解决Winform中弹出WPF窗体不能在文本框输入问题 - 飞鹰专栏 - CSDN博客 Windows...窗体WPF 互操作性输入 - 小而美 - CSDN博客 ElementHost.EnableModelessKeyboardInterop(Window) Method (System.Windows.Forms.Integration

2.4K20

WPF自学入门(九)WPF自定义窗口基类

今天简单记录一个知识点:WPF自定义窗口基类,常用winform的人知道,winform窗体继承是很好用,写一个基础窗体,直接在后台代码改写继承窗体名。...第一次尝试使用WPF直接修改后台代码继承自定义窗体SEWindow后就会报错如下: ?...经过一段时间查看WPF相关数据资料,可按如下方法创建继承自 Window 基类自定义窗口基类。...步骤如下: 一、创建Window基类 添加一个名为 SEWindow 类,Window 类引入System.Windows 命名空间,关闭事件,双击事件,最大化与还原事件可能存在重载版本时间及方法需要用...二、使用Window基类 创建窗口类,后台类改为继承自定义 窗体基类。

1.9K20
领券