通过SynchronizationContext对象可以让方法在指定的上下文中运行。SynchronizationContext在Winform程序中发挥了巨大的作用。Winform有一个广为人知的特性:其他工作线程的代码不能直接调用窗口线程中的资源。为了实现互操作,有几种主流的方法,分别是事件通知、Invoke和SynchronizationContext,使用SynchronizationContext可能是最简单的办法了。在Winform下使用SynchronizationContext对象的方法如下所示:
static void LoginBtn_Click(Object sender, RoutedEventArgs e)
{
Thread t = new Thread(RunWorker);
t.Start(SynchronizationContext.Current);
}
static void RunMorker(Object o)
{
SynchronizationContext sc = o as SynchronizationContext;
sc.Post(SetBackground, null);
}
static void SetBackground(Object o)
{
mainWindow.Background = Brushes.Red;
}
上面的代码把窗口线程的SynchronizationContext对象传入到工作线程中,然后就可以在工作线程通过传入的SynchronizationContext对象的Post方法调用UI线程的方法了。