【发布时间】:2017-08-08 15:20:12
【问题描述】:
我在 C#.net 中有一个 Windows 窗体应用程序,我想在通过 X 按钮关闭窗体时备份所以我写了下面的代码来执行此操作。但是当我运行程序时,我注意到此事件执行 2 次请帮我解决这个问题
private void MenuFrm_FormClosing(object sender, FormClosingEventArgs e)
{
// DialogResult dialogResult = MessageBox.Show("ایا مایل به گرفتن نسخه پشتیبان می باشید", "هشدار", MessageBoxButtons.YesNo);
// if (dialogResult == DialogResult.Yes && !closefrm)
try
{
DialogResult dialogResult = MessageBox.Show("آیا مایل به خروج از نرم افزار میباشید؟", "خروج", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
SaveFileDialog f = new SaveFileDialog();
f.InitialDirectory = "D:\\";
f.Title = "HoghooghDastmozdBackup";
if (Directory.Exists("E:\\MobtakeranSoftBackup\\"))
{
f.FileName = "E:\\MobtakeranSoftBackup\\" + getPersianDate() + ".BAK";
f.FilterIndex = 1;
f.OverwritePrompt = true;
f.Filter = @"SQL Backup files (*.BAK) |*.BAK|All files(*.*) |*.*";
SqlConnection sqlconn = new SqlConnection(DBsetting.Connstring);
SqlCommand sqlcmd = new SqlCommand("BACKUP DATABASE HoghooghDastmozd TO DISK =@n", sqlconn);
sqlcmd.Parameters.AddWithValue("@n", f.FileName);
sqlconn.Open();
sqlcmd.ExecuteNonQuery();
sqlconn.Close();
Application.Exit();
}
else
{
Directory.CreateDirectory("E:\\MobtakeranSoftBackup\\");
f.FileName = "E:\\MobtakeranSoftBackup\\" + getPersianDate() + ".BAK";
f.FilterIndex = 1;
f.OverwritePrompt = true;
f.Filter = @"SQL Backup files (*.BAK) |*.BAK|All files(*.*) |*.*";
SqlConnection sqlconn = new SqlConnection(DBsetting.Connstring);
SqlCommand sqlcmd = new SqlCommand("BACKUP DATABASE HoghooghDastmozd TO DISK =@n", sqlconn);
sqlcmd.Parameters.AddWithValue("@n", f.FileName);
sqlconn.Open();
sqlcmd.ExecuteNonQuery();
sqlconn.Close();
Application.Exit();
}
}
else
{
e.Cancel = true;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
Application.Exit();
}
}
【问题讨论】:
-
确保您没有连接两个事件处理程序 - 在您的项目中搜索“MenuFrm_FormClosing”。您可能还想检查 FormClosingEventArgs 的 CloseReason,因为这也会在 Windows 关闭时触发。
标签: c# events backup formclosing