2009-05-05 41 views
2

我有一个WritableBitmap更新在一个单独的线程,特别是响应一个事件。WritableBitmap不适用于单独的线程?

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

当在单独的线程上运行,不被所述Lock()命令抛出一个System.InvalidOperationException

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

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

没有异常抛出和代码运行完美。 Lock()的目的不是允许多线程访问吗?任何想法为什么发生这种情况?

回答

2

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

编辑:更多关于线程在WPF发现here

+0

锁应该不会做任何绘图。我会假设我可以将内存复制到后台缓冲区,然后将它绘制在UI线程上。 – 2009-05-05 19:48:09

相关问题