C#显示对话框线程

时间:2014-03-17 09:42:12

标签: c# multithreading dialog showdialog

我有一个Dialog Box(导入程序),我用它来选择要导入应用程序的文件。此Dialog Box(导入程序)还有另一个对话框(文件),它是OpenFileDialog

代码运行类似

//Main File

if (Importer.ShowDialog == DialogResult.Ok){
// Start Import
}

//Importer File

OnDoubleClick of TextBox

if(File.ShowDialog == DialogResult.Ok){
// Find File
}

然而,在第二个ShowDialog我总是收到以下错误:

An unhandled exception of type 'System.Threading.ThreadStateException' occurred in System.Windows.Forms.dll

Additional information: Current thread must be set to single thread apartment (STA) mode before OLE calls can be made. Ensure that your Main function has STAThreadAttribute marked on it. This exception is only raised if a debugger is attached to the process.

这是一个线程问题,我应该如何处理它。

我期待着您的回复。 问候 詹姆斯

- 更新一些代码来帮助这一切都在第一个Form.ShowDialog()

private void fileNametxt_DoubleClick(object sender, EventArgs e)
    {


        myth = new Thread(new System.Threading.ThreadStart(ChooseFile));
        myth.ApartmentState = ApartmentState.STA;
        myth.Start();

        while(myth.ThreadState != ThreadState.Aborted || myth.ThreadState != ThreadState.Stopped)
        {
               fileNametxt.Text = FileName;
        }

        fileNametxt.Text = FileName;


    }


    private void ChooseFile()
    {
        openFileDialog.ShowDialog();

        if (openFileDialog.FileName != "")
        {
            FileName = openFileDialog.FileName.Trim();

        }

        myth.Abort();

    }

如何停止线程并更新屏幕上的文本。线程似乎只能与varibles交谈而不是UI控件。

2 个答案:

答案 0 :(得分:4)

要修复此标记,请使用属性Main()标记Program类的[STAThread]方法。

后续阅读:CA2232: Mark Windows Forms entry points with STAThread

在这种情况下,当然Main()方法 是您的切入点,无论框架是什么。

答案 1 :(得分:0)

出现此错误。构建解决方案不会引发错误,但调试会引发该错误。 我尝试创建新的解决方案并为新解决方案添加令人兴奋的项错误已修复!