C#一行代码之跨线程更新控件1

发布时间 2023-05-06 16:07:36作者: 懒树懒

代码使用

ThreadPool.QueueUserWorkItem(o =>
{
    for (int i = 0; i < 100; i++)
    {
        textBox1.ExInvokeIt(textBox => textBox.Text = i.ToString());
    }
});
//
Task.Run(() =>
{
    for (int i = 0; i < 100; i++)
    {
        textBox1.ExInvokeIt(textBox => textBox.Text = i.ToString());
    }
});

 

代码封装

/// <summary>
/// 跨线程访问控件,调用示例:textBox1.ExInvokeIt(it => it.Text = message);  
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="control"></param>
/// <param name="action"></param>
public static void ExInvokeIt<T>(this T control, Action<T> action) where T : Control
{
    if (control.InvokeRequired)
        control.Invoke(action, control);
    else
        action(control);
}

如果代码中的This不去掉,则为拓展方法,必须申明在静态类中且为静态方法,如果要和通用类一样则可以去掉This关键字