PictureBox Invalidate耗费了太多时间

时间:2015-12-19 14:34:54

标签: c# picturebox

我不知道,为什么无效需要花费这么多时间。我写基础程序而且我不知道如何修复,以便顺利工作。

while (_continue)
{
  try
  {
    string message = port.ReadLine();
    Console.WriteLine("message");
    pictureBox1.Invalidate();
  }
  catch (TimeoutException) {
  }
}

绘画功能是:

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    Console.WriteLine("hi");
}

我在没有控制台写入的情况下更改代码并且工作相同或者可能最差。

结果如下:100x“message”1x“hi”,1x“message”1x“hi”,如100x“message”。我需要更频繁地使用油漆。

1 个答案:

答案 0 :(得分:1)

我认为你的public async Task ReadMessages() { while (_continue) { try { string message = await Task.Run(() => port.ReadLine()); Console.WriteLine("message"); pictureBox1.Invalidate(); } catch (TimeoutException) { } } } 方法很少被调用,因为你的循环阻塞了UI线程。您应该考虑使此代码异步。以下是如何完成此操作的示例:

port

因此,此方法在等待来自Task的数据时返回给调用者。执行port.ReadLine() Console.WriteLine后,此方法会在pictureBox1继续执行,并使pictureBox1无效。

然后它循环,启动另一个任务从端口读取并在等待数据时再次将控制权返回给调用者。

这样您就不会阻止UI线程,{{1}}有时间自己绘制。