- 在System.ComponentModel下有一个抽象类:SynchronizationConetxt,它使得Thread Marshaling(线程封送处理:数据的所有权,从一个线程交给另一个线程)得到泛化。
针对富客户端应用,移动、桌面(WPF,UWP,WinForms)等富客户端应用的API,它们都定义和实例化了SynchronizationContext的子类。
- 可以通过静态属性SynchronizationContext.Current来获得(当运行在UI线程时)
捕获该属性让你可以在稍后的时候从worker线程向UI线程发送数据(例子)
public partial class MainForm : Form
{
private SynchronizationContext _uiSyncContext;
public MainForm()
{
InitializeComponent();
_uiSyncContext = SynchronizationContext.Current;
new Thread(Worker).Start();
}
void Worker()
{
Thread.Sleep(5000);
UpdateMessage("The answer!");
}
private void UpdateMessage(string message)
{
_uiSyncContext.Post(_ => txtMsg.Text = message, null);
}
}
调用Post就相当于调用Sispatch或Control上面的BeginInvoke方法
- 还有一个Send方法,它等价于Invoke方法