zoukankan      html  css  js  c++  java
  • WinForm 防止因为各种因素的操作导致主窗体冻结、卡死的解决方法

    定义变量

    private bool bRetrun = false;

    private ManualResetEvent meDo;

    定义一个可以公用的静态变量

    public class CommonData

    {

        public static bool CloseFrom { get; set; }

    }

     

    主程序

    Thread t = new Thread(new ThreadStart(TestDB));

    meDo = new ManualResetEvent(false);

    t.Start();

    this.Hide();

    if (new frmCloes().ShowDialog() == DialogResult.OK)

    {

        this.Show();

    }

    meDo.WaitOne();

    if (bRetrun) return;

     

    把会卡死的程序放到方法里执行,比如TestDB

    private void TestDB()

    {

        if (!SysConfig.DBConnectionRing())

        {

            MessageBox.Show("选择的数据库连接失败,请检查!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Error);

            bRetrun = true;

        }

        else

        {

            bRetrun = false;

        }

        meDo.Set();

        CommonData.CloseFrom = true;

    }

     

    创建一个用于显示进程的窗体,做门面

    在该窗体添加一个label和一个timer

    private int RunCount = 0;

    private void tmr_Tick(object sender, EventArgs e)

    {

        if (CommonData.CloseFrom)

        {

            this.DialogResult = DialogResult.OK;

            Close();

        }

        else

        {

            RunCount++;

            if (RunCount > 10)

            {

                lblStatus.Text = "操作正在进行,请稍后";

                RunCount = 0;

            }

            lblStatus.Text += ".";

        }

    }

    作者: 火地晋
    出处: http://yelaiju.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    强化学习 | D3QN原理及代码实现
    Airtest入门及多设备管理总结
    JS图片base64压缩
    ABP框架
    .net gof23种设计模式
    VS2013添加Socket
    VS2013用InstallShield打包winfrom项目
    .net core3.1 log4net无法写日志
    git commit 修改提交说明信息
    screen 使用总结
  • 原文地址:https://www.cnblogs.com/yelaiju/p/1813474.html
Copyright © 2011-2022 走看看