非活动窗体的退出

本文介绍了一种C#应用程序实现定时自动退出的方法,通过利用Application.Idle和Application.AddMessageFilter,结合计时器(myTimer)实现定时任务。文章提供了关键代码段,包括初始化、加载、关闭事件处理,以及核心的定时逻辑。注意测试代码时避免消息框弹出和控件状态改变,以免触发事件重复执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

应用程序一段时间不进行操作自动退出[C#] 

 

没有时间去详细说明了,纯贴代码

public partial class MainFrm : Form, IMessageFilter
    {

public MainFrm()
        {
            InitializeComponent();
            Application.Idle+=new EventHandler(Application_Idle);
        }

private void MainFrm_Load(object sender, EventArgs e)
        {
            Application.AddMessageFilter(this);

}

private void MainFrm_FormClosing(object sender, FormClosedEventArgs e)
        {
            Application.RemoveMessageFilter(this);

}

private void Application_Idle(object sender, EventArgs e)
        {
            if (m_WaitMinute == 0)
            {
                myTimer.Start();
            }
            else
            {
                if (m_WaitMinute >= 6)
                    this.Close();
            }
        }

public bool PreFilterMessage(ref Message m)
        {
            if(m_WaitMinute!=0)
            {
                m_WaitMinute = 0;
                this.myTimer.Enabled = false;
                return true;
            }
            //switch(m.Msg)
            //{
            //    case 513:
            //        MessageBox.Show("鼠标左键不可用");
            //        return true;
            //    case 513:
            //        MessageBox.Show("鼠标右键不可用");
            //        return true;
            //}

            return false;
        }

private int m_WaitMinute = 0;
        private void myTimer_Tick(object sender, EventArgs e)
        {
            if (m_WaitMinute < 60)
            {
                myTimer.Enabled = true;
                myTimer.Interval = 10000; //10秒
                m_WaitMinute += 1;
                this.Opacity = 1.0 - Convert.ToDouble(m_WaitMinute / 60.0);
                //MessageBox.Show(this.Opacity.ToString(),m_WaitMinute.ToString());
            }
            else
            {
                myTimer.Enabled = false;
                //MessageBox.Show("时间到");
            }
        }

测试代码的时候不要有消息框弹出,不要修改控件的值或者状态,这些都会造成事件的再次触发。郭振方。Application.Idle + timer 或者 Application.AddMessageFilter + timer 二者使用其一就可以了,放在这里以备参考

原文链接:http://gguozhengfang.blog.163.com/blog/static/1444176020081050163871/

转载于:https://www.cnblogs.com/jinyuttt/archive/2011/04/29/2032403.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值