Invoke(Delegate)

后端 未结 9 1121
误落风尘
误落风尘 2020-11-22 16:33

Can anybody please explain this statement written on this link

Invoke(Delegate):

Executes the specified delegate on the thread that owns th

9条回答
  •  旧巷少年郎
    2020-11-22 17:03

    this.Invoke(delegate) make sure that you are calling the delegate the argument to this.Invoke() on main thread/created thread.

    I can say a Thumb rule don't access your form controls except from main thread.

    May be the following lines make sense for using Invoke()

        private void SetText(string text)
        {
            // InvokeRequired required compares the thread ID of the
            // calling thread to the thread ID of the creating thread.
            // If these threads are different, it returns true.
            if (this.textBox1.InvokeRequired)
            {   
                SetTextCallback d = new SetTextCallback(SetText);
                this.Invoke(d, new object[] { text });
            }
            else
            {
                this.textBox1.Text = text;
            }
        }
    

    There are situations though you create a Threadpool thread(i.e worker thread) it will run on main thread. It won't create a new thread coz main thread is available for processing further instructions. So First investigate whether the current running thread is main thread using this.InvokeRequired if returns true the current code is running on worker thread so call this.Invoke(d, new object[] { text });

    else directly update the UI control(Here you are guaranteed that you are running the code on main thread.)

提交回复
热议问题