C#一行代码实现(04)跨线程设置控件值,免去InvokeRequired通用方法1

主要功能

  • 实现后台线程访问并设置窗口控件值,线程安全,在后台线程直接调用方法,不需要判断InvokeRequired

一行代码


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);
}

声明

posted @ 2020-10-24 10:53  易几施  阅读(392)  评论(0)    收藏  举报