c#中winform程序退出方法技巧总结(转)

asdyzh asdyzh     2023-01-16     263

关键词:

本文实例总结了C#中WinForm程序退出方法技巧。分享给大家供大家参考。具体分析如下:

在c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit();Application.ExitThread(); System.Environment.Exit(0); 等他们各自的方法不一样,下面我们就来详细介绍一下。

1.this.Close();   只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出;

2.Application.Exit();  强制所有消息中止,退出所有的窗体,但是若有托管线程(非主线程),也无法干净地退出;

3.Application.ExitThread(); 强制中止调用线程上的所有消息,同样面临其它线程无法正确退出的问题;

4.System.Environment.Exit(0);   这是最彻底的退出方式,不管什么线程都被强制退出,把程序结束的很干净。

下面看一些实例

当我打开一个子窗体,进行某项操作时,如果字窗体中有循环操作时。如果运行中我关闭子窗体,发现窗体虽然关闭了,但子窗体中的循环程序却没有退出,一直在 执行,并占用着系统资源,直到循环结束,才真正的释放资源。尽管我在字窗体的Closed事件中写了如下代码:

复制代码 代码如下:
private void frmFileDisposal_Closed(object sender, System.EventArgs e)

         this.Dispose();
         this.Close();

后来从查MSDN和从网上查资料才得知,Dispose()方法,虽然能释放当前窗体的资源,却不能强制结束循环,要想强制突出当前程序要 用:System.Environment.Exit(int exitcode)方法;该方法:终止当前进程并为基础操作系统提供指定的退出代码。

如下则问题解决:

复制代码 代码如下:
private void frmFileDisposal_Closed(object sender, System.EventArgs e)
         
 System.Environment.Exit(System.Environment.ExitCode);   
 this.Dispose();
 this.Close();

或者把它放到事件里:

复制代码 代码如下:
while (MessageBox.Show("退出当前窗体?", "", MessageBoxButtons.YesNo) 
   ==   DialogResult.No)
...
   for(int j=1; j<=i; j++) 
  ...
      listBox1.Items.Add(j);
      

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

还有一种方法:

复制代码 代码如下:
System.Threading.Thread.CurrentThread.Abort();


或者

复制代码 代码如下:

Process.GetCurrentProcess().Kill()

或者

复制代码 代码如下:

Application.ExitThread();

或者

复制代码 代码如下:

Application.ExitThread()


不过以上方法,都是强制直接退出了整个程序,不只是关闭子窗体。可能还会引发某些问题。

我感觉最好方法的就是,在子窗体的Closing事件中,写循环退出条件,这样就可以避免某些未知的错误,而且可以只关闭子窗体,并释放子窗体占用的资源。
Application.Exit(); 方法停止在所有线程上运行的所有消息循环,并关闭应用程序的所有窗口。
Application.Exit 是一种强行退出方式,就像 Win32 的 PostQuitMessage()。它意味着放弃所有消息泵,展开调用堆栈,并将执行返回给系统。






















c#安全退出窗口

在c#中退出WinForm程序包括有很多方法,如:this.Close();Application.Exit();Application.ExitThread();System.Environment.Exit(0);等他们各自的方法不一样,下面我们就来详细介绍一下。1.this.Close();  只是关闭当前窗口,若不是主窗体的话,是... 查看详情

c#中winform使用相对路径读取文件的方法

这篇文章主要介绍了C#中winform使用相对路径读取文件的方法,实例分析了C#使用相对路径读取文件的技巧与实际应用,需要的朋友可以参考下本文实例讲述了C#中winform使用相对路径读取文件的方法。分享给大家供大家参考。具体分... 查看详情

c#在winform中使用webkit传递js对象实现与网页交互的方法

这篇文章主要介绍了C#在WinForm中使用WebKit传递js对象实现与网页交互的方法,涉及针对WebBroswer控件及WebKit控件的相关使用技巧,需要的朋友可以参考下本文实例讲述了C#在WinForm中使用WebKit传递js对象实现与网页交互的方法。分享给... 查看详情

c#winform程序中强制退出程序以及启动程序

C#WinForm程序退出方法:Application.Exit();//强制所有消息终止,退出所有窗体,但是若有托管线程(非主线程),也无法干净地退出this.Close();//只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,但是若有托管线程(非主线... 查看详情

c#winform界面美化技巧(扁平化设计)(转)(代码片段)

...技巧在不使用第三方控件如IrisSkin的前提下,依然可以对winform做出让人眼前一亮的美化首先,我们先来实现主界面的扁平化  此处分为两个步骤,第一步是更改winform自带的MainForm窗体属性,第二步是添加窗体事件。将主窗体For... 查看详情

如何在 C# Winforms 应用程序中发送 PayPal REST API 退款?

】如何在C#Winforms应用程序中发送PayPalRESTAPI退款?【英文标题】:HowdoyousendaPayPalRESTAPIRefundinaC#Winformsapp?【发布时间】:2018-08-0712:15:21【问题描述】:我在网上找到的用于在C#中实现PayPalRESTAPI的文档非常少。我已经完成了获取访问... 查看详情

在winform中

this.close();和Application.Exit();方法,当用户点击退出时,都是关闭窗体,请问这2个方法的区别和什么时候用哪个方法好点?高手赐教!!Application.Exit方法通知所有消息泵必须终止,并且在处理了消息以后关闭所有应用程序窗口。该方法停... 查看详情

如何在 C# winform 中每分钟自动调用一个方法

】如何在C#winform中每分钟自动调用一个方法【英文标题】:howtocallamethodeveryminautomacticinC#winform【发布时间】:2017-09-2514:43:36【问题描述】:在C#winform中每5秒自动运行一个函数当一个程序执行时我调用一个方法来加载我怎样才能... 查看详情

c#中winform程序怎么制作纵向选项卡

C#中winform程序怎么制作纵向选项卡?好像要用到第三方控件,可是没找到--C#WINFORM的TabControl本身就可以纵向你将TabControl的Alignment改成Left或者Right就可以了左右两侧的纵向选项卡改成left/right后选项卡的文字是显示不出来的需要自... 查看详情

c#中messagebox用法大全(转)

我们在程序中经常会用到MessageBox。   MessageBox.Show()共有21中重载方法。现将其常见用法总结如下:    1.MessageBox.Show("Hello~~~~");最简单的,只显示提示信息。 2.MessageBox.Show("Therearesomethingwrong!","ER 查看详情

c#程序退出的几种方法

C#程序退出的几种方法方法一:this.Close();   //只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出;方法二:Application.Exit();  //强制所有消息中止,... 查看详情

如何在 C# Winforms 应用程序中取消执行长时间运行的异步任务

】如何在C#Winforms应用程序中取消执行长时间运行的异步任务【英文标题】:Howtocancelexecutionofalong-runningasynctaskinaC#Winformsapp【发布时间】:2016-05-0518:41:48【问题描述】:我是一个缺乏经验的C#程序员,需要帮助管理我的程序流程。... 查看详情

c#退出程序方法

... 只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出;2.Application.Exit(); 强制所有消息中止,退出所有的窗体,但是若有托管线程(非主线程),也无法干净地... 查看详情

c#自己写的winform程序批量导入excel文件到oracle数据库的过程中,程序运行会很慢!而且winform窗体会卡

C#自己写的Winform程序批量导入Excel文件到Oracle数据库的过程中,程序运行会很慢!而且Winform窗体会卡住,直到导入成功为止,我知道这应该是在主线程执行的结果,怎么让程序在子线程执行,不让窗体卡住!参考技术A使用BackGrou... 查看详情

在c#中的winform应用程序中获取在OCR期间提取的第一个字母的坐标

】在c#中的winform应用程序中获取在OCR期间提取的第一个字母的坐标【英文标题】:getcoordinatesofthefirstalphabetextractedduringOCRinwinformapplicationinc#【发布时间】:2018-11-2100:45:26【问题描述】:是否有任何方法或任何DLL可以让我在Windows窗... 查看详情

c#网页之间的跳转语句

...,分别如下:  1、goto语句  goto语句可以直接跳转到程序中用标签制定的另一行;  (标签是一个标示符,后跟一个冒号)string mark=Console.ReadLine();switch(mark)        case "Mark1":                 goto Label1; Label1... 查看详情

如何在 C# WinForm 桌面应用程序中存储 MySql 数据库连接字符串

】如何在C#WinForm桌面应用程序中存储MySql数据库连接字符串【英文标题】:HowtostoreMySqldatabaseconnectionstringinC#WinFromdesktopapplication【发布时间】:2019-08-2201:31:38【问题描述】:在代码中使用server、user、password和database数据似乎不正确... 查看详情

在 C# (WinForms) 中拦截应用程序中所有控件的单击事件

】在C#(WinForms)中拦截应用程序中所有控件的单击事件【英文标题】:InterceptingclickeventforallcontrolsinanappinC#(WinForms)【发布时间】:2011-05-1520:24:01【问题描述】:我想制作一个应用程序来拦截我应用程序所有形式的所有UI事件并将它... 查看详情