一尘不染

C#WinForms:如何设置主函数STAThreadAttribute

c#

saveFileDialog.ShowDialog()在后台线程中调用时,出现以下异常:

必须先将当前线程设置为单线程单元(STA)模式,然后才能进行OLE调用。确保您的Main函数上已标记STAThreadAttribute。

根据

要解决此问题,请插入以下语句:

Threading.Thread.CurrentThread.ApartmentState = Threading.ApartmentState.STA;

在Main中,位于Application.Run语句之前。

但是Application.Run语句位于Program.cs中,它似乎是生成的代码,因此任何更改都可能会意外丢失。另外,我找不到在项目或主窗体属性中将当前线程设置为STA的方法,但是也许我在错误的位置查找。saveFileDialog.ShowDialog()在后台线程中调用的正确方法是什么?


阅读 400

收藏
2020-05-19

共1个答案

一尘不染

不应从后台线程调用ShowDialog()-使用Invoke(..)。

Invoke((Action)(() => { saveFileDialog.ShowDialog() }));
2020-05-19