Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';不要从事件中关闭窗体_C#_Invoke - Fatal编程技术网

C# Can';不要从事件中关闭窗体

C# Can';不要从事件中关闭窗体,c#,invoke,C#,Invoke,我的主窗体名为Form1,它有一个类,其中包含一个事件,该事件指示Form1应该关闭 当我收到事件并尝试关闭时,我得到一个例外,那就是必须使用control.invoke。好吧,我用这个代码打电话,但仍然得到相同的异常: void Prox_OkEvent(object sender, EventArgs e) { if (this.InvokeRequired) { callControlhandler c = new callControlhandler(Cl

我的主窗体名为Form1,它有一个类,其中包含一个事件,该事件指示Form1应该关闭

当我收到事件并尝试关闭时,我得到一个例外,那就是必须使用control.invoke。好吧,我用这个代码打电话,但仍然得到相同的异常:

void Prox_OkEvent(object sender, EventArgs e)
{
    if (this.InvokeRequired)
    {
        callControlhandler c = new callControlhandler(CloseForm);
        c.Invoke();
    }
    else Close();
}

private void CloseForm()
{
    try { this.Close(); }
    catch (Exception e) { MessageBox.Show(e.Message); }
}

问题在哪里?感谢您提供的任何帮助

应针对
表单
本身调用调用
。在这种情况下,它是针对
c
调用的

试试看

        if (this.InvokeRequired)
        {
            this.Invoke(new Action(CerrarForm));
        }

应针对
表单本身调用
Invoke
。在这种情况下,它是针对
c
调用的

试试看

        if (this.InvokeRequired)
        {
            this.Invoke(new Action(CerrarForm));
        }

这个电话来自不同的线程吗?你能发布准确的错误吗?也试着阅读Jon Skeet的答案-
CerrarForm
是指
CloseForm
?这个调用来自不同的线程吗?你能发布准确的错误吗?也试着阅读Jon Skeet的答案-
CerrarForm
是指
CloseForm
?+1
Invoke
的目的是将其传递给GUI线程。OP的代码只是调用当前线程上的委托。+1
Invoke
的要点是将其传递给GUI线程。OP的代码只是调用当前线程上的委托。