首页
学习
活动
专区
工具
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 函数调用。

4.3K10
  • 在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

    53222

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

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

    3.6K20

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

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

    57320

    winform和WPF的那点事~

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

    4.6K20

    【炫丽】从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.4K20

    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.7K50

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

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

    65940

    【炫丽】从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.

    8.2K60

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

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

    1.9K50

    虚拟桌宠模拟器: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 和生成项目为

    1.1K00

    使用.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) 关联的 WPF、Windows 窗体或 C++ Win32 应用中的任何 UI 元素。

    2.3K10

    Qt 第一步 HelloWorld 的第一个程序

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

    64710

    C#上位机开发与工控通讯实战课程

    安装Visual Studio首先,确保你已经安装了Visual Studio,这是开发C#应用程序的常用IDE。你可以从Visual Studio官方网站下载并安装最新版本。2....创建新项目打开Visual Studio,选择“创建新项目”,选择“Windows窗体应用(.NET Framework)”,然后点击“下一步”。输入项目名称和位置,点击“创建”即可。...三、设计上位机界面在Windows窗体应用中,你可以通过拖放控件来设计用户界面。...2、创建项目:打开Visual Studio,选择创建一个新的项目。在项目模板中,选择适合上位机开发的Windows Forms应用程序或WPF应用程序。...可以通过拖拽的方式,在窗体中摆放这些控件。同时,可以设置控件的属性,如名称、文本、大小、位置等。4、编写代码:为控件添加事件处理程序,如点击事件、鼠标移动事件等。

    17400

    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.5K20
    领券