代码之家  ›  专栏  ›  技术社区  ›  Will Eddins ianpoley

可写位图不能在单独的线程上工作?

  •  2
  • Will Eddins ianpoley  · 技术社区  · 17 年前

    我有一个可写入的位图,它在一个单独的线程上更新,特别是响应一个事件。

    myWritableBitmap.Lock();
    CopyMemory(myWritableBitmap.BackBuffer, ...);
    myWritableBitmap.AddDirtyRect(...);
    myWritableBitmap.Unlock();

    当在单独的线程上运行时, Lock() 命令抛出 System.InvalidOperationException .

    如果我运行相同的代码:

    this.Dispatcher.Invoke(new VoidDelegate(delegate
    {
      //Same code as above...
    }));

    不会引发异常,代码运行良好。lock()的目的不是允许多线程访问吗?知道为什么会这样吗?

    1 回复  |  直到 16 年前
        1
  •  2
  •   HakonB    17 年前

    许多WPF绘图函数必须在Stathread中运行。第二段代码使绘图功能在主UI线程中运行。

    编辑:更多关于WPF中线程的信息 here .