【问题标题】:WritableBitmap does not work on separate Thread?WriteableBitmap 在单独的线程上不起作用?
【发布时间】:2009-05-05 19:34:31
【问题描述】:

我有一个 WritableBitmap,它在单独的线程上更新,特别是为了响应事件。

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

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

如果我像这样运行相同的代码:

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

不抛出异常,代码运行完美。 Lock() 的目的不是允许多线程访问吗?知道为什么会这样吗?

【问题讨论】:

    标签: c# wpf multithreading


    【解决方案1】:

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

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

    【讨论】:

    • 虽然锁不应该做任何绘图。我假设我可以将内存复制到后台缓冲区,然后将其绘制在 UI 线程上。
    • 我认为这种情况是 WPF 中的大部分绘图功能都使用了一些基于 COM 的代码——需要从 STAThread 调用。
    • 这是否意味着我可以使用 Apartment = STA 在新线程上生成上述代码?
    猜你喜欢
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    相关资源
    最近更新 更多