c# - 带有 Windows 窗体的 WPF - STAThread

标签 c# wpf winforms sta

我是 WPF 的新手,有几个关于 WPF 和 Windows 窗体集成的问题。

我有一个现有的 Visual C# Windows 窗体应用程序。我想将它与 WPF 窗口集成,单击按钮即可显示。这是不可能的,因为 WPF 期望调用线程是 STAThread,并且默认情况下 WinForm 假定该线程是 MTAThread。我尝试生成一个单元状态为 STAThread 的新线程来调用 WPF UI,但这没有用。我也尝试使用 Dispatcher.BeginInvoke 方法和 Background Worker,但都没有解决问题。

1) 我们可以在不将 Main 标记为 STAThread 的情况下调用 WPF 窗口/控件吗?如果可能的话,谁能给我指出正确的方向? 2) 如果实现此目的的唯一方法是将主线程设为 STAThread,是否会对应用程序的总体性能/响应能力产生任何影响。

提前致谢。

最佳答案

我认为最简单的解决方案是让您的 WinForms 线程在 STA 中执行。拥有 STA 线程 winforms 应用程序没有错(实际上通常是默认设置)。

您可以通过在程序的主要方法中添加以下行来解决此问题:

[STAThreadAttribute]
static void Main(string[] args)

关于c# - 带有 Windows 窗体的 WPF - STAThread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/216634/

相关文章:

wpf - 为什么偏爱 RelayCommand 而不是 RoutedCommand?

c# - 组合框未绑定(bind)

c# - 高效使用OnPaint

c# - 我如何在 C++ 中使用 ArrayList?

c# - 空条件运算符兼容性

c# - 如何在触发器中设置属性 (WPF)

wpf - 防止点击通过 XAML/WPF 中的按钮

c# - 显示表单时如何运行代码?

c# - 如何使用 ScrollBarRenderer 更改滚动条颜色

c# - Asp.Net Web API ODATA 的 GROUP BY/不区分大小写扩展?