C#:this.Invoke((MethodInvoker)委托

Pet*_*ter 4 delegates invoke

有人可以解释下面的代码:

                this.Invoke((MethodInvoker)delegate
                {
                    lblNCK.Text = cncType;
                });
Run Code Online (Sandbox Code Playgroud)

这是它来自哪里:

        string cncType;

        if (objDMainCncData != null)
        {
            int rc = objDMainCncData.Init(objDGroupManager.Handle);

            if (rc == 0)
            {
                cncType = objDMainCncData.GetCncIdentifier();

                if (cncType != string.Empty)
                {
                    if (cncType.ToUpper().IndexOf("+") != -1)
                        _bFXplus = true;

                    this.Invoke((MethodInvoker)delegate
                    {
                        lblNCK.Text = cncType;
                    });
                }
            }
            else
            {
                DisplayMessage("objDMainCncData.Init() failed ! error : " + rc.ToString());
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我没有使用"this.Invoke((MethodInvoker)委托").

提前谢谢你.

彼得.

Ill*_*har 12

奇怪的是没有人回答这个问题.

让我们把它分块:

this.Invoke:这是一个同步机制,包含在所有控件中.所有图形/ GUI更新必须仅从GUI线程执行.(这很可能是主线程.)因此,如果您有其他线程(例如工作线程,异步函数等)将导致GUI更新,则需要使用Invoke.否则程序会爆炸.

委托{...}:这是一个匿名函数.您可以将其视为"即时创建功能".(而不是在代码中查找空格,创建函数名称,参数等)

(MethodInvoker):MethodInvoker只是Invoke所期望的委托的名称.例如.Invoke期望获得一个函数,其签名与"MethodInvoker"函数相同.

会发生什么,是Invoke被赋予一个函数指针.它通过互斥锁唤醒GUI线程并告诉它执行该函数(通过函数指针).然后父线程等待GUI线程完成执行.它已经完成了.