我有一个应用程序在尝试打开SaveFileDialog时崩溃。我搜索了答案,我发现我需要把它放在一个新的线程中,这就是我所做的,但我有一个关于STA的错误。所以我把
th.SetApartmentState(ApartmentState.STA);
在几个问题之后,我设法使线程工作,但现在我有
正在执行的操作线程处于无效状态。
这是我的Thread函数:
public static void ouvrir(object name)
{
saveFileDialog1.Filter = "Microsoft Word Document (.docx)|*.docx";
saveFileDialog1.RestoreDirectory = true;
saveFileDialog1.Title = "Where to save the " + (string)name + " ? ";
DialogResult result = saveFileDialog1.ShowDialog();
oke = true;
try
{
if (result == DialogResult.OK)
{
boule = true;
ptth = saveFileDialog1.FileName;
}
}
catch (Exception exc)
{ MessageBox.Show(exc.Message); }
}
此行显示错误(我使用互操作保存单词doc):
doc.SaveAs(imp);
我用Google搜索了这个错误,但似乎我是世界上唯一一个遇到这个问题的人......这是出于我的理解,我在怀疑和无知的海洋中航行。
谢谢
答案 0 :(得分:1)
您必须在用于创建表单的同一个线程上显示该对话框,因此您根本不应使用此处的线程。如果需要从工作线程调用保存对话框,请使用Invoke方法在UI线程上执行代码。
示例:How to update the GUI from another thread in C#?
以下是来自MSDN的更多信息:Control.InvokeRequired Property