我重写的装饰器类的OnRender(的DrawingContext的DrawingContext)在C#的OnRender(的DrawingContext的DrawingContext)C#
在这种方法我想画保存在我的字典imageCache图像。 问题是在我的图像存储在字典中的线程完成之前,OnRender方法被调用。
我试过Thread.Sleep(60)这个工程,但我的程序变得非常慢。
你们可以给我一些想法,我可以绕过这个问题。
谢谢。
我重写的装饰器类的OnRender(的DrawingContext的DrawingContext)在C#的OnRender(的DrawingContext的DrawingContext)C#
在这种方法我想画保存在我的字典imageCache图像。 问题是在我的图像存储在字典中的线程完成之前,OnRender方法被调用。
我试过Thread.Sleep(60)这个工程,但我的程序变得非常慢。
你们可以给我一些想法,我可以绕过这个问题。
谢谢。
你是否将线程存储在字典中的图像运行一次?如果是这样,我建议你在你的图像存储线程完成之前不要在你的OnRender
中做任何事情。
但是,如果您的图像存储线程为每个渲染或频繁运行,您可能需要实现一些thread syncronization(以及你也需要它的第一种情况)。例如,您可以参考具有旧图像的字典进行渲染,然后在工作线程构建新字典后,可以使用lock
并为该引用指定一个新的字典。
(这就是我可以用这么少的输入提示)
可以锁定并通过使用互斥同步线程。
private static Mutex mut = new Mutex();
,然后你可以锁定并通过
mut.WaitOne();
mut.ReleaseMutex();
释放你想要的方式和这里是MSDN教程。
谢谢,我的字典在开始时可能是空的,它会频繁运行以更新自身。 – raym0nd
@ raym0nd,所以我想你需要检查它是否在你的'OnRender'中是空的,并且只在它不是空的时候进行渲染。另外,如果您希望在构建新字典时使用它来渲染之前的字典,请在渲染例程生成后更新引用。不要忘记线程同步。 – Dmitry
我用Mutex,它的效果很好。 – raym0nd