ShowDialog上的InvalidOperationException

时间:2016-10-18 14:53:59

标签: c#

我正在开发一个C#应用程序。

我有一个像对话框一样使用的对象:

public partial class MyDialog : Form

主窗口是:

public class MyForm : Form

我可以通过以下方式使用它:

public class ProgramApp
{
    public static MyForm MainForm { get { return _mainForm;  } }
}

在一个功能中,我可以同时使用:

MyDialog dlg = new MyDialog();
dlg.ShowDialog(ProgramApp.MainForm);

第一次调用很好,但是在第二次调用时,我有一个带有HResult = 0x80131509的System.InvalidOperationException并且消息:

  

跨线程操作无效:从a访问控制'MainForm'   除了创建它的线程以外的线程。

(翻译自法语,原文:)

  

“Opérationinter-threads non-valide:lecontrôle'MainForm'a   fait l'objet d'unacèsàpartird'un thread autre que celui sur   lequel ilaétécréé。“

我该怎么做才能解决这个问题?

编辑:

我添加了这段代码:

MyDialog dlg = new MyDialog();
bool needInvokeDlg = dlg.InvokeRequired;
bool needInvokeForm = ProgramApp.MainForm.InvokeRequired;
dlg.ShowDialog(ProgramApp.MainForm);

首次尝试都是假的。第二,needInvokeForm是真的。如何进行调用以将ProgramApp.MainForm设置为参数?

1 个答案:

答案 0 :(得分:1)

需要在UI线程上调用该对话框。

有关详细讨论,请参阅this post