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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    css属性操作2(外边距与内边距<盒子模型>)
    css的属性操作1
    css伪类
    属性选择器二
    属性选择器1
    03_MySQL重置root密码
    02_Mysql用户管理之Navicat下载及安装
    18.扩散模型
    17.广播模型
    16.友谊悖论
  • 原文地址:https://www.cnblogs.com/yelaiju/p/1813474.html
Copyright © 2011-2022 走看看