我对 WPF 有点陌生。在试验 WPF 及其线程模型时,我尝试做一些试验。
我在MainWindow.xaml.cs中运行了以下代码行。
var sync = SynchronizationContext.Current;
// 返回 System.Windows.Threading.DispatcherSynchronizationContext //
var frm = new System.Windows.Form();
IntPtr temp = frm.Handle;
sync = SynchronizationContext.Current;
// 仍然同步的是 System.Windows.Threading.DispatcherSynchronizationContext。所以我有点猜到如果 SynchronizationContext.Current 为空,System.Windows.Form 会创建 System.Windows.Forms.WindowsFormsSynchronizationContext。//
//现在是奇怪的部分。
Thread th = new Thread(() =>
{
Action strac = UpdateTextBox;
frm.BeginInvoke(strac);
});
th.Start();
void UpdateTextBox()
{
textBox1.Text = "Abhik";
}
// 我尝试使用 System.Windows.Form 的 BeginInvoke 将请求编组回 UI 线程并更新 UI 控件。
有效!!..
可以请任何人告诉我为什么它有效。这是因为 WPF 控件和 winform 控件在 windows os 中共享相同的祖先,即 User32.dll 和 DispatcherSynchronizationContext 和 WindowsFormsSynchronizationContext 在内部做同样的事情。
任何帮助将不胜感激。