【问题标题】:InvalidOperationException on ShowDialogShowDialog 上的 InvalidOperationException
【发布时间】:2016-11-02 18:50:08
【问题描述】:

我正在开发一个 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);

第一次调用效果很好,但在第二次调用时,我有一个 System.InvalidOperationException,HResult = 0x80131509 和消息​​:

跨线程操作无效:从 线程不是创建它的线程。

(翻译自法语,原文:)

“线程间操作无效:le contrôle 'MainForm' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé。”

我能做些什么来解决这个问题?

编辑:

我添加了这段代码:

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

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

【问题讨论】:

  • 在原帖上没有找到答案
  • @dotctor 你能重新打开这个问题吗?
  • 也许将表单转换为所需的IWin32Window 接口就足够了,即dlg.ShowDialog((IWin32Window)ProgramApp.MainForm);,因为它没有任何 UI 元素。
  • 我试过了,但是没用。我的问题是在另一个线程中将MainForm 作为参数。我尝试从MainFormdlg 调用,但没有任何效果。我需要帮助,我的问题已经结束(询问后 2 分钟,我想知道是否仔细阅读了这个问题)。无论如何我会尝试其他方式...

标签: c#


【解决方案1】:

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

如需深入讨论,请参阅this post

【讨论】:

    猜你喜欢
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多