如何为使用NetCore / Net5+的WPF设置STA(Single Thread Apartment)线程状态?
如何为使用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+中该如何做呢?
问题的原因是不需要手动设置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属性指定入口点。