2011-07-18 26 views
0

我重写的装饰器类的OnRender(的DrawingContext的DrawingContext)在C#的OnRender(的DrawingContext的DrawingContext)C#

在这种方法我想画保存在我的字典imageCache图像。 问题是在我的图像存储在字典中的线程完成之前,OnRender方法被调用。

我试过Thread.Sleep(60)这个工程,但我的程序变得非常慢。

你们可以给我一些想法,我可以绕过这个问题。

谢谢。

回答

1

你是否将线程存储在字典中的图像运行一次?如果是这样,我建议你在你的图像存储线程完成之前不要在你的OnRender中做任何事情。

但是,如果您的图像存储线程为每个渲染或频繁运行,您可能需要实现一些thread syncronization(以及你也需要它的第一种情况)。例如,您可以参考具有旧图像的字典进行渲染,然后在工作线程构建新字典后,可以使用lock并为该引用指定一个新的字典。

(这就是我可以用这么少的输入提示)

+0

谢谢,我的字典在开始时可能是空的,它会频繁运行以更新自身。 – raym0nd

+0

@ raym0nd,所以我想你需要检查它是否在你的'OnRender'中是空的,并且只在它不是空的时候进行渲染。另外,如果您希望在构建新字典时使用它来渲染之前的字典,请在渲染例程生成后更新引用。不要忘记线程同步。 – Dmitry

+0

我用Mutex,它的效果很好。 – raym0nd

0

可以锁定并通过使用互斥同步线程。

private static Mutex mut = new Mutex(); 

,然后你可以锁定并通过

mut.WaitOne(); 
mut.ReleaseMutex(); 

释放你想要的方式和这里是MSDN教程。