private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if(MessageBox.Show("Do you want to close your window?", "My Application",
MessageBoxButtons.YesNo) ==  DialogResult.Yes)
{
e.Cancel = false;
}
}用以上代码,×掉窗口之后什么反应都没有啊?应该怎么样呢?

解决方案 »

  1.   

    在此代码段中添加Thread.Abort()方法。
    see:
    ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemThreadingThreadClassAbortTopic.htm
      

  2.   

    e.Cancel = false之后当,然什么反应都没有
    还要干吗?
    这样你就可以掉你的线程啦。
      

  3.   

    private void Form1_Closing(object sender, System.EventArgs e)
    {
    for(int i=0;i<ThreadIdx;i++)
    {
    if(thr[ThreadIdx].IsAlive)
    thr[ThreadIdx].Abort();
    }
    }
    我用以上代码,×掉窗口后,线程仍然在运行,而且设了断点都没有进入这个事件???
      

  4.   

    不好意思,刚才写错了,应该是:
    private void button1_Click(object sender, System.EventArgs e)
    {
    //结束所有线程
    for(int i=0;i<ThreadIdx;i++)
    {
    if(thr[i].IsAlive)
    thr[i].Abort();
    }
    }
    ×掉窗口后,线程仍然在运行,而且设了断点发现都没有进入这个事件
      

  5.   

    那你在form的Closing事件写thr[i].Abort();
      

  6.   

    closing事件是在窗口关闭之前进行的.
    closed事件是在窗口关闭之后进行的.看你的操作是要在什么时候运行.
      

  7.   

    不好意思,早上写得有点乱了,现在整理一下
    for(int i=0;i<ThreadIdx;i++)
    {
        if(thr[i].IsAlive)
    thr[i].Abort();
    }
    这段代码如果放在private void button1_Click(object sender, System.EventArgs e)
    里面,单击button1,就可以实现关闭我之前打开的线程。
    但是如果放在private void Form1_Closing(object sender, System.EventArgs e)里面,
    ×掉窗口后,线程仍然在运行,而且设了断点发现都没有进入这个事件。
    而且就算我没有开任何线程,×掉窗口后也没有到这个事件处理代码里面的断点。
      

  8.   

    protected override void  OnClosing(CancleEventArgs ce){
    for(int i=0;i<ThreadIdx;i++)
    {
        if(thr[i].IsAlive)
    thr[i].Abort();
    }
    base.OnClosing(ce);
    }
    这样你试试。
    再.Net的设计中当你按下close按钮或按alt+f4的话,Form1_Closing是不会被调用的。
    所以这时你就要重载OnClosing这个事件。