主要功能
- 实现后台线程访问并设置窗口控件值,线程安全,在后台线程直接调用方法,不需要判断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);
}
声明