当前位置: 首页 > 工具软件 > Invoke > 使用案例 >

Invoke理解

佟涵畅
2023-12-01

Invoke或者begininvoke,委托。

用于在子线程中,执行主线程UI操作时。他的使用必然伴随着Task或者Thread。

private void button4_Click(object sender, EventArgs e)
{
    Task t = new Task(()=>{
        Thread.Sleep(30000);
    });
    t.Start();
    t.ContinueWith(t1 => {
        this.Invoke(new EventHandler(delegate
        {
            textBox1.Text += "OK";
        }));
        Thread.Sleep(2000);
    });
}

 EventHandler本质:

using System.Runtime.InteropServices;

namespace System
{
    // 摘要:
    //     表示将处理不包含事件数据的事件的方法。
    //
    // 参数:
    //   sender:
    //     事件源。
    //
    //   e:
    //     不包含任何事件数据的 System.EventArgs。
    [Serializable]
    [ComVisible(true)]
    public delegate void EventHandler(object sender, EventArgs e);
}

1、Invoke几种写法:https://blog.csdn.net/thanks_hck/article/details/97273977

2、delegatee进阶(小明买书):https://www.cnblogs.com/xuxiaoshuan/p/6844511.html

优化以后的代码:

private void button4_Click(object sender, EventArgs e)
{
    Task t = new Task(()=>{
        Thread.Sleep(30000);
    });
    t.Start();
    t.ContinueWith(t1 => {
        this.Invoke(new Action(delegate
        {
            textBox1.Text += "OK";
        }));
        Thread.Sleep(2000);
    });
}

Action本质:

using System.Runtime.CompilerServices;

namespace System
{
    // 摘要:
    //     封装一个方法,该方法不具有参数并且不返回值。
    [TypeForwardedFrom("System.Core, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089")]
    public delegate void Action();
}

C#委托的介绍(delegate、Action、Func、predicate) :https://www.cnblogs.com/akwwl/p/3232679.html

 

 类似资料: