c#之关闭窗体的实现方法

 更新时间:2023年07月12日 09:40:51   作者:张伟杰-Vijay  
这篇文章主要介绍了c#之关闭窗体的实现方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

c#关闭窗体的方法

关闭窗体的四种方法

1. close():

指仅关闭当前窗体,如果不是主窗体(包含主线程的窗体,并非MDI窗体)的话,是无法退出整个程序的。如果有托管线程也无法退出。

此方法会调用 dispose() 方法,所以它会自动的帮我们释放内存,除了以下两种情况:

  • (1)该窗体是多文档应用程序(MDI)的一部分并且此窗体不可见;
  • (2)此窗体是“模态”窗体。

close() 方法执行的时候会触发两个事件:Form_Closing 和 Form_Closeed 事件,Form_Closing 是在窗体关闭时执行,Form_Closed 是在窗体关闭之后执行,所以如果想取消关闭窗体,可以在 Form_Closing 事件里取消。

2. Application.Exit():

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

3. Application.ExitThread():

强制中止调用线程上的所有消息,同样面临其它线程无法正确退出的问题。

4. System.Environment.Exit(0);

这是最彻底的退出方式,不管什么线程都被强制退出,把程序结束的很干净。 参数0:代表程序正常退出;参数1:代表程序非正常退出。

close() 和 dispose() 的区别

  • close():这个方法会自动调用 dispose()方法。
  • dispose():这个方法的作用是释放组件使用的所有资源,.NET 提供的垃圾自动回收机制,可以帮我们自动回收垃圾对象,可是垃圾回收器只能回收“托管资源”,而不能回收“非托管资源”,而且垃圾回收器也并不是立即回收,而是每隔一段时间才会回收一次,每次回收的时间我们都不知道。

所以 dispose() 方法是为了弥补这种机制所产生的方法,调用 dispose(true) 方法可以释放“托管”和“非托管”资源,而且它可以不必等待垃圾回收器来自动释放,调用此方法可以显示释放资源。

Form.show() 和 Form.ShowDialog() 的区别

  • From.Show():窗体显示出来的是非模态窗体
  • From.ShowDialog():窗体显示出来的是模态窗体,而且点击窗体右上角的关闭按钮时,它不是调用 close() 方法,而是调用 hide() 方法。所以它并不是真正的关闭,再调用此方法窗体还会出现。而非模态窗体,点击关闭的时候,会调用 close() 方法,再次调用 Show() 方法,就会报错,因为窗体对象已被释放。

托管资源 和 非托管资源

  • 托管资源:由CLR管理分配和释放的资源,即由CLR里new出来的对象
  • 非托管资源:不受CLR管理的对象,windows内核对象,如文件、数据库连接、套接字、COM对象等

如果某类型使用到了非托管资源,那么,就需要让此类型继承接口IDisposable。需要显示释放资源,因为垃圾回收器并不会回收非托管资源。

c#弹窗提示并自动关闭方法

刚学C#不久,就写个工具,总结写一个简便自定义提示窗口方法,并自动关闭。

1.在项目添加windows form(非user control),命名为Form_wait。

2.在Form_wait,加入需要控件与一个定时器timer1。

数字10为计时显示,10秒后自动默认选择“是”

timer1 属性interval 设为1000,即 tick事件1s进入

3.定义Form_wait响应事件:

  	private void timer1_Tick(object sender, EventArgs e)  //1s进入一次
        {
            count -= 1;
            this.label2.Text = count.ToString();
            if(count==0)
            {
                this.timer1.Stop();
                this.DialogResult = DialogResult.OK;	//这里是重点,在主窗口里能读取返回值	
            }
        }
        private void button1_Click(object sender, EventArgs e) //“是”
        {
            this.timer1.Stop();
            this.DialogResult = DialogResult.OK;
        }
        private void button2_Click(object sender, EventArgs e)
        {
            this.timer1.Stop();
            this.DialogResult = DialogResult.No;
        }

4.主窗口调用。

                        Form_wait subform = new Form_wait(15);  //15为设定倒时
                        if (subform.ShowDialog() == DialogResult.No)
                        {
                            MessageBox.Show("跳出控件");
                            return;
                        }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 在C#中用表格替换Word文档中文本的详细步骤

    在C#中用表格替换Word文档中文本的详细步骤

    在日常的文档处理工作中,我们经常会遇到这样的场景:需要将 Word 文档中的特定文本内容,替换为结构化的实际数据表格,使用Spire.Doc for .NET库,我们可以通过精准定位文本并利用其强大的替换功能,下面小编为大家详细说说,需要的朋友可以参考下
    2025-09-09
  • C#使用Stack<T>进行堆栈设计的实现

    C#使用Stack<T>进行堆栈设计的实现

    堆栈代表了一个后进先出的对象集合,当您需要对各项进行后进先出的访问时,则使用堆栈,本文主要介绍了C#使用Stack<T>类进行堆栈设计的实现,文中通过示例代码介绍的非常详细,感兴趣的可以了解一下
    2024-03-03
  • C#实现可捕获几乎所有键盘鼠标事件的钩子类完整实例

    C#实现可捕获几乎所有键盘鼠标事件的钩子类完整实例

    这篇文章主要介绍了C#实现可捕获几乎所有键盘鼠标事件的钩子类,以完整实例形式分析了C#捕获键盘鼠标事件的钩子操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • Unity UI组件ScrollRect实现无限滚动条

    Unity UI组件ScrollRect实现无限滚动条

    这篇文章主要为大家详细介绍了Unity UI组件ScrollRect实现无限滚动条,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C#中的多线程多参数传递详解

    C#中的多线程多参数传递详解

    第一种解决方案的原理是:将线程执行的方法和参数都封装到一个类里面。通过实例化该类,方法就可以调用属性来实现间接的类型安全地传递多个参数
    2014-01-01
  • C#实现JWT无状态验证的实战应用解析

    C#实现JWT无状态验证的实战应用解析

    这篇文章主要介绍了C#实现JWT无状态验证的实战应用解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • c#文本加密程序代码示例

    c#文本加密程序代码示例

    这是一个加密软件,但只限于文本加密,加了窗口控件的滑动效果,详细看下面的代码
    2013-11-11
  • unity通过Mesh网格绘制图形球体

    unity通过Mesh网格绘制图形球体

    这篇文章主要为大家详细介绍了unity通过Mesh网格绘制图形球体,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • C# JavaScriptSerializer序列化时的时间处理详解

    C# JavaScriptSerializer序列化时的时间处理详解

    这篇文章主要为大家详细介绍了C# JavaScriptSerializer序列化时的时间处理详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • C#调用FFmpeg提取视频中音频流的三种方式

    C#调用FFmpeg提取视频中音频流的三种方式

    这篇文章主要介绍了C#通过三种方式调用FFmpeg(命令行/NuGet/GUI),不仅能提取音频,还能批量处理、格式转换、错误处理,只要掌握这些技巧,再复杂的音视频文件也逃不过你的“五指山”,需要的朋友可以参考下
    2025-06-06

最新评论