C# 非调试模式下的线程使用和绘图问题

C# 非调试模式下的线程使用和绘图问题,c#,multithreading,debugging,drawing,visual-studio-debugging,C#,Multithreading,Debugging,Drawing,Visual Studio Debugging,我正在使用Visual Studio 2012,用c#编写。我的程序有一个在后台运行的采集线程。事情是这样的: 在线程内部: public void myAcquisitionTask(object o) { while(ThreadAlive) { // Collect data System.Threading.Thread.Sleep(100); } } 并呼吁: Thread myThread; myThread.start(da

我正在使用Visual Studio 2012,用c#编写。我的程序有一个在后台运行的采集线程。事情是这样的:

在线程内部:

public void myAcquisitionTask(object o)
{
    while(ThreadAlive)
    {
        // Collect data
        System.Threading.Thread.Sleep(100);
    }
}
并呼吁:

Thread myThread;
myThread.start(data);
在我的GUI中,我有一个可单击的按钮,当单击时,它会绘制一些数据(作为
图形
对象)。基本上是一些线路,但有很多线路(大约50000条)。绘制过程如下所示:

private void btnDisplaySavedData_Click(object sender, EventArgs e)
{
    Graphics graphicsObj = myDisplay.CreateGraphics();

    // Do for multiple lines
    graphicsObj.DrawLine(pen, startpt, endpt);

    graphicsObj.Dispose();
}
我意识到当线程运行时,
图形
对象将绘制;但是,正如绘图完成一样,它将被擦除

有趣的是,这种行为只发生在非调试模式下(VisualStudio中的ctrl-f5),而从不发生在调试模式下。此外,我意识到,如果我不在非调试模式下调用
myThread.start()
,绘图也能正常工作


这让我相信,线和画之间是有关系的。有人知道可能的原因吗?

请澄清什么是
myThread
myThread
线程
类的对象实例。为了清楚起见,我已经编辑了我的问题。你能发布一篇文章吗?这样我们就可以看到和你看到的相同的问题了。根据你提到的
Graphics
我假设这是Winforms。在Winforms中绘制的唯一正确方法是处理
Paint
事件(在子类中使用处理程序或重写
OnPaint()
),并基于数据的某些当前状态进行绘制。您没有提供足够的代码示例,但很可能猜测您没有这样做,而只是执行类似于调用
CreateGraphics()
并在单击按钮时绘制的操作。它在调试模式下工作只是一个巧合。这也很容易失败。结果表明,没有在OnPaint()中绘制导致了该问题。