private void toolStripButtonConnect_Click(object sender, EventArgs e)
{
   //...
   timerForDB = new System.Threading.Timer(OnDisplay, null, 0, 3000);
   //...
}
void OnDisplay(object obj)
{
                LedDisplay(m_Result[counter][0], m_Result[counter][1]);
                Application.DoEvents();
                if (counter == m_Result.Count - 1)
                {
                    counter = 0;
                }
                else
                {
                    counter++;
                }
}
public void LedDisplay(string PlateNumber, string strStatus)
        {
            string bmpfile = string.Format("{0}\\ledplate.bmp", BinDirectory);
            //...用于生成不同内容的bmpfile
            LedShow(bmpfile, "192.168.1.176");
        }
[DllImport("LedShow.dll", EntryPoint = "LedShow")]
private static extern void LedShow(string lp_bmppath, string lp_ipAddr);
在关闭主窗体时就会出现错误我的理解就是关闭的时候子线程还在执行任务并且需要MainForm,而实际上这时候主线程已经释放掉了,所以就出现了截图中的错误.曾经尝试过在OnDisplay方法中做一个判断,if(this.Handle != null) LedDisplay(m_Result[counter][0], m_Result[counter][1]);但是这根本不管用,还是报一样的错误.希望大家帮帮忙,看看怎么解决这个问题比较好.

解决方案 »

  1.   

    form closing 的时候判断一下子线程时候还在运行, 运行就abort()一下.
      

  2.   

    关闭主线程的时候,kill掉一切有关线程。
      

  3.   

    #1 我也在OnDisplay方法里获得线程并且在formClosing时Abort,结果还是一样报错,是不是我获得的不是那个线程?我不得而知了
    #4 这个也尝试过了,并不能解决问题/
      

  4.   

    System.Environment.Exit(System.Environment.ExitCode); 
      

  5.   

    设置为后台线程吧  :IsBackground=true
      

  6.   

    使用.net封装的类库机制,尽量不要使用 win api。那样就不会纠结这些东西。
      

  7.   

    关闭的时候停掉timer,调用SDK之前判断窗口IsDisposed状态,加锁
      

  8.   

    我记得WinForm有个OnClose事件可以善后
      

  9.   

    设置为后台线程吧 :IsBackground=true