这是本文档旧的修订版!
线程保护
使用 lock (lockObject) 或者 Monitor.Enter(lockObject)
Task.Run(() => { Monitor.Enter(lockObject); try { GetActiveDataGrid().SelectedItem = item; }catch (Exception e) { // ... } finally { Monitor.Exit(lockObject); } });
使用 Dispatcher.Invoke 来实现相同的跨线程访问控制。InvokeRequired 来检查当前线程是否为主线程 如果不是,则使用 BeginInvoke 来将设置操作委托到主线程。
if (InvokeRequired) { BeginInvoke(new Action<int>(SetValue), value); }else{ SetValue(value); }