如何为使用NetCore / Net5+的WPF设置STA(Single Thread Apartment)线程状态?

11 浏览
0 Comments

如何为使用NetCore / Net5+的WPF设置STA(Single Thread Apartment)线程状态?

通常,只需在Main方法上添加[STAThread]即可完成此操作 - 但是对于新项目,没有这样的东西?

当我尝试像这样设置自己的程序入口点时:

class Program
{
    [STAThread]
    static void Main(string[] args)
    {
        var application = new App();
        application.Run();
    }
}

它会显示找到了多个程序入口。所以是的 - 在旧的.NET WPF中,这样做是可以的,那么在netcore3/net5+中该如何做呢?

0
0 Comments

问题的原因是不需要手动设置STA(Single-Threaded Apartment,单线程单元)的公寓状态,因为自动生成的Main方法已经包含了相关设置。

解决方法是可以在适当的obj目录中找到生成的文件。例如,从WpfSta目录运行dotnet new wpf命令,会在obj/Debug/net5.0-windows/App.g.cs中生成以下代码:

/// 
/// Application Entry Point.
/// 
[System.STAThreadAttribute()]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "5.0.6.0")]
public static void Main() {
    WpfSta.App app = new WpfSta.App();
    app.InitializeComponent();
    app.Run();
}

如果只是为了添加STAThread,那么不需要编写自己的Main方法。如果想要自定义Main方法,则可以在项目文件中使用StartupObject属性指定入口点。

0