【问题标题】:OnRender(DrawingContext drawingContext) C#OnRender(DrawingContext 绘图上下文) C#
【发布时间】:2011-07-19 22:29:45
【问题描述】:

我在 C# 的 Adorner 类中覆盖 OnRender(DrawingContext drawingContext)

在此方法中,我试图绘制存储在 imageCache 字典中的图像。 问题是在将我的图像存储在字典中的线程完成之前调用 OnRender 方法。

我尝试了 Thread.Sleep(60) 这行得通,但我的程序变得很慢。

你们能告诉我如何解决这个问题吗?

谢谢。

【问题讨论】:

    标签: c# multithreading


    【解决方案1】:

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

    但是,如果您的图像存储线程在每次渲染时运行或频繁运行,您可能需要实现一些 thread syncronization(在第一种情况下您也需要它)。例如,您可以引用包含旧图像的字典以进行渲染,然后在您的工作线程构建新字典后,您可以使用 lock 并将新字典分配给该引用。

    (这就是我能建议的全部内容)

    【讨论】:

    • 谢谢,我的字典一开始可能是空的,它会经常运行以自我更新。
    • @raym0nd,所以我想你需要检查你的OnRender 中是否为空,并且只有在它不为空时才进行渲染。此外,如果您想在构建新字典时使用渲染以前的字典,请仅在构建后更新渲染例程使用的引用。不要忘记线程同步。
    • @raym0nd,在我看来,长时间锁定 UI 线程并不是一个好主意,但决定权在你。
    • 我需要等待我的其他线程完成,这样我才能从字典中获取正确的输入,我的等待时间还不错。
    【解决方案2】:

    您可以使用 Mutex 锁定和同步线程。

    private static Mutex mut = new Mutex();
    

    然后你可以通过使用锁定和释放你想要的方法

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

    这里是MSDN 教程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 2012-06-21
      • 2011-11-11
      • 1970-01-01
      相关资源
      最近更新 更多