线程处于执行操作的无效状态。 C#

时间:2016-04-27 07:59:22

标签: c# multithreading

我有一个应用程序在尝试打开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搜索了这个错误,但似乎我是世界上唯一一个遇到这个问题的人......这是出于我的理解,我在怀疑和无知的海洋中航行。

谢谢

1 个答案:

答案 0 :(得分:1)

您必须在用于创建表单的同一个线程上显示该对话框,因此您根本不应使用此处的线程。如果需要从工作线程调用保存对话框,请使用Invoke方法在UI线程上执行代码。

示例:How to update the GUI from another thread in C#?

以下是来自MSDN的更多信息:Control.InvokeRequired Property