在与主窗口相同的线程中创建保存对话框

时间:2014-01-09 04:28:40

标签: c# multithreading user-interface dialog sta

我想知道是否有任何简单的方法让保存文件对话框在与我的程序主窗口相同的线程中运行?

private void saveAs_click(object sender, EventArgs e)
{
    System.Windows.Forms.SaveFileDialog saveDiag = new System.Windows.Forms.SaveFileDialog();
    saveDiag.ShowDialog();
}

我收到以下错误:

  

System.Windows.Forms.dll中出现未处理的“System.Threading.ThreadStateException”类型异常

     

附加信息:在进行OLE调用之前,必须将当前线程设置为单线程单元(STA)模式。确保您的Main函数标记了STAThreadAttribute。仅当调试器附加到进程时才会引发此异常。

我创建了一个关于对话框,我打电话给:

private static void aboutThreadProc()
{
     Application.Run(new aboutDialog());
}

但我想避免再次为保存对话框执行此操作,除非有人知道将用户输入对话框的信息传递回主程序的简单方法吗?

抱歉,我让我的进程和线程在这里混淆了一些,这让我很困惑,因为这是我编写的第一个GUI应用程序,所以我不知道如何让所有内容进行通信。

编辑:

我的主要窗口是以这样开始的:

[STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        resultsStore workingStore = new resultsStore();

        System.Threading.Thread mainThread = new System.Threading.Thread(new System.Threading.ThreadStart(mainThreadProc));
        mainThread.Start();
    }

private static void mainThreadProc()
{
        Application.Run(new main());
    }

对任何建议开放

1 个答案:

答案 0 :(得分:0)

解决方案:

产生自己的“主线程”的目的是什么?已有一个主线程为您提供窗口消息。那是你的问题。删除它,只需要Application.Run(new main());没有线程。 - Simon Whitehead 10分钟前