【发布时间】: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作为参数。我尝试从MainForm和dlg调用,但没有任何效果。我需要帮助,我的问题已经结束(询问后 2 分钟,我想知道是否仔细阅读了这个问题)。无论如何我会尝试其他方式...
标签: c#