同时调用两个不同的控件

时间:2015-02-26 17:46:48

标签: c# winforms invoke

我正在创建一个Form并尝试显示为一个模态,提供一个父级。

Form modal = new Form();
modal.ShowModal(OtherForm);

问题是它们是从不同的线程访问并引发异常。我尝试使用调用以及#34;微软的方式",这意味着使用代理。但是,我需要同时调用两个控件modalOtherForm。如果我只调用其中一个,我会得到一个例外,即从另一个线程访问另一个,反之亦然。

下面的代码是 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);
    }
}

1 个答案:

答案 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对象的现有实例化吗?