FormClosing需要新线程吗?

时间:2010-02-05 18:28:14

标签: c# .net winforms events

我有一个按钮点击事件处理程序,它说明了.Close()

在FormClosing事件中,我检测到未保存的更改并说出“您要保存吗?”

如果他们说是,我设置e.Cancel = true,然后调用我的Save方法。如果数据在我的Save方法中保存好,最后我说这个。关闭()但表单保持打开状态。

这似乎是一个简单的想法,但我无法解决。

我是否需要在FormClosing中创建新线程,所以如果他们说是设置e.Cancel = true并创建一个新线程来执行Save,然后调用this.Close()

2 个答案:

答案 0 :(得分:3)

听起来你想做的不是将e.Cancel设置为true,而是从Save()有条件地调用FormClosing。您只有在保存失败时才会取消。例如:

private void OnFormClosing(object sender, System.ComponentModel.CancelEventArgs e)
{
   if ( IsDataModified() )  // check if the data is unsaved...however you do so
   {
      // display a message asking the user to save changes or abort.
      if(MessageBox.Show("Do you want to save your changes?", 
                         "My Application", 
                         MessageBoxButtons.YesNo) ==  DialogResult.Yes)
      {
          if( !SaveChanges(); )
              e.Cancel = true; // save did not succeed!
      }
   }
}

答案 1 :(得分:2)

  

如果他们说是,我设置e.Cancel = true,然后调用我的Save方法。如果数据在我的保存方法中保存好,最后我说这个。关闭()但表格保持打开

改变这一点。

  • 提示用户
  • 如果他们回答是,请设置e.Cancel = !Save()
  • 如果他们拒绝,请设置e.Cancel = true

这将使表单关闭,除非他们在提示时拒绝,或者Save()例程失败。不需要新的线程或线程,只需稍微修改逻辑。