如何从线程中绘制,但更聪明?

时间:2011-02-16 21:08:20

标签: c# multithreading drawing

    private void DisplayThread()
    {
        while (RunDisplayThread)
        {
            Thread.Sleep(30);
            MPLastMessage.Text = MPTemplate.MPRET[(int)MP.MPReturn];
            Invoked();
            TickCount++;
            TickCountLabel.Text = string.Format("Tick Count: {0}", TickCount);
        }
    }

    private void Invoked()
    {
        while (MP.Drawing) { };
        g.DrawImage(MP.offscreen, 50, this.Height-300);
    }

所以,这可行,但在阅读之后,

Draw image on a form from a separate thread

我显然是以一种不那么聪明的方式做到这一点。任何人都可以解释建议的答案与我正在做的事情之间的区别吗?我一直在教自己C#,我对这个答案的工作原理感到茫然。

1 个答案:

答案 0 :(得分:0)

虽然您提供的链接被命名为“从单独的线程中绘制(...)”,但绘图本身仍然在Gui线程上使用Control.Invoke()http://msdn.microsoft.com/en-us/library/zyzhdc6b.aspx)。

您的Invoked()方法在“DisplayThread”上运行。我不知道g变量来自哪里,这是一个在OnPaint方法中设置的类变量吗?如果这样,DrawImage如果比OnPaint中的代码花费更多时间则会失败。