在UI线程上异步执行操作,不阻塞在调用线程上的执行。
WPF
public static void OnUIThread(this Control control, Action action)
{
if (control.Dispatcher.CheckAccess())
{
control.Dispatcher.BeginInvoke(action);
}
else
{
control.Dispatcher.Invoke(action);
}
}
btn.OnUIThread(() => btn.IsEnabled = true);
WinForm
public static void OnUIThread(this Control control, Action code)
{
if (control.InvokeRequired)
{
control.BeginInvoke(code);
}
else
{
code.Invoke();
}
}