我正在创建一个Form并尝试显示为一个模态,提供一个父级。
Form modal = new Form();
modal.ShowModal(OtherForm);
问题是它们是从不同的线程访问并引发异常。我尝试使用调用以及#34;微软的方式",这意味着使用代理。但是,我需要同时调用两个控件modal
和OtherForm
。如果我只调用其中一个,我会得到一个例外,即从另一个线程访问另一个,反之亦然。
下面的代码是 mockup 解决方案,由于调用循环导致堆栈溢出。如何解决这个问题?
public static void ShowModalForm(Form f, Control parent)
{
if (parent.InvokeRequired || f.InvokeRequired)
{
ShowModalFormCallback d = new ShowModalFormCallback(ShowModalForm);
f.Invoke(d, new object[] { f, parent });
parent.Invoke(d, new object[] { f, parent });
}
else
{
f.ShowDialog(parent);
}
}
答案 0 :(得分:1)
我只是在猜测,但这可能有用吗?
public static void ShowModalForm(Form f, Control parent)
{
if (parent.InvokeRequired)
{
ShowModalFormCallback d = new ShowModalFormCallback(ShowModalForm);
parent.Invoke(d, new object[] { f, parent });
}
else
{
f.ShowDialog(parent);
}
}
但我真的不明白你在做什么。并且f真的引用了Form对象的现有实例化吗?