Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 表单关闭错误_C#_Winforms - Fatal编程技术网

C# 表单关闭错误

C# 表单关闭错误,c#,winforms,C#,Winforms,我正在使用C#进行表单应用。我的问题是,表单关闭后,任务管理器上是否不能停止 我的代码: private void Form3_FormClosing(object sender, FormClosingEventArgs e) { DialogResult dr = MessageBox.Show("Gerçekten programı kapatmak istiyor musunuz?", "Closing event", MessageBoxButtons.YesNo);

我正在使用C#进行表单应用。我的问题是,表单关闭后,任务管理器上是否不能停止

我的代码:

private void Form3_FormClosing(object sender, FormClosingEventArgs e)
{
    DialogResult dr = MessageBox.Show("Gerçekten programı kapatmak istiyor musunuz?", "Closing event", MessageBoxButtons.YesNo);

    if (dr == DialogResult.No)
        e.Cancel = true;
    else
        e.Cancel = false;
}
像这样:


关闭表单并不意味着您的申请将终止。
Form3\u FormClosing只做它所说的:它关闭一个表单。如果您打开了其他表单,应用程序将不会终止

private void Form3_FormClosing(object sender, FormClosingEventArgs e)
{
    DialogResult dr = MessageBox.Show("Gerçekten programı kapatmak istiyor musunuz?", "Closing event", MessageBoxButtons.YesNo);

    if (dr == DialogResult.No)
        e.Cancel = true;
    else
        // Here's what you need.
        Application.Exit();

       //or Environment.Exit() but not recommended would just kill the process. If some form has e.g. unsaved changes it would not have any chances to ask the user if he wants to save them. Also resources (database connections etc.) could not be released properly, files might not be flushed etc. 

       //Environment.Exit()
} 

如果
Form3
的实例是您的主窗体,这意味着如果使用
Form3
的实例调用了
Application.Run()
,则通常在关闭该窗体时进程将退出

如果
Form3
不是主窗体,则表示主窗体是隐藏的,而不是关闭的


我看到一个程序仍然潜伏在后面的另一个原因是自定义前台线程

Thread t = new Thread( someMethodWithALoop );
t.Start();
如果此线程正在运行,进程将不会退出。您可以通过将线程标记为背景来解决此问题

Thread t = new Thread( someMethodWithALoop );
t.IsBackground = true;
t.Start();

但是,如果您有一些这样的代码,更好的做法是使用
计时器

为什么需要在FormClosing中调用
应用程序.Exit()
?那没有道理。我没有投反对票,但我没有得到这个答案。我也不太明白这个问题。原因很简单,表格是一个表格3,也就是说它不是主要的表格?因此,应用程序正在使用另一个窗体运行,因此他应该调用application.exit-1。不应在表单关闭中调用
应用程序.Exit()
。如果表单关闭,但应用程序没有关闭,则会打开另一个表单,
application.Exit
将关闭该表单(它根本不应该以这种方式管理)。不退出应用程序的另一个原因。这是表格3。@Scott只是想让你知道我们正在讨论这个主题。@Phadapunk-我不是为了修改大括号而编辑别人的代码。如果你看原始答案,缩进就消失了。没有什么比没有正确对齐的代码更令人讨厌的了。为了将来的访问者,只需简单地格式化代码就可以了。可能会有一些非后台线程在运行,这将阻止应用程序退出。你可能得调查一下。附加一个调试器,查看表单关闭后是否有线程仍在运行。