这是本文档旧的修订版!


线程保护

使用 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);
 }
it/dotnet/线程保护.1692862729.txt.gz · 最后更改: 2023-08-24 07:38 由 goldentianya
回到顶部
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0