【问题标题】:WPF with Windows Forms - STAThread带有 Windows 窗体的 WPF - STAThread
【发布时间】:2010-09-18 00:20:41
【问题描述】:

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

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

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

提前致谢。

【问题讨论】:

    标签: c# wpf winforms sta


    【解决方案1】:

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

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

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

    【讨论】:

    • 实际上 OLE 拖放和某些 COM 组件接口需要 STA 才能工作..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多