我正在使用Visual Studio 2012,用c#编写。我的程序有一个在后台运行的采集线程。它是这样的:
线程内部:
public void myAcquisitionTask(object o)
{
while(ThreadAlive)
{
// Collect data
System.Threading.Thread.Sleep(100);
}
}
并致电:
Thread myThread;
myThread.start(data);
在我的GUI中,我有一个可点击的按钮,在点击时可以绘制一些数据(作为Graphics
对象)。它基本上是一些线,但有很多线(约50000)。绘图如下:
private void btnDisplaySavedData_Click(object sender, EventArgs e)
{
Graphics graphicsObj = myDisplay.CreateGraphics();
// Do for multiple lines
graphicsObj.DrawLine(pen, startpt, endpt);
graphicsObj.Dispose();
}
我意识到当线程正在运行时,Graphics
对象将会绘制;但正如绘图完成时一样,它将是erased
。
有趣的是,此行为仅在非调试模式(Visual Studio中的ctrl-f5)中发生,并且从不在调试模式下。另外,我意识到如果我不在非调试模式下调用myThread.start()
,绘图也可以。
这让我相信线程和绘图之间存在关系。有谁知道可能的原因是什么?