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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    BZOJ3518 : 点组计数
    BZOJ2217 : [Poi2011]Lollipop
    李洪强经典面试题40-可能碰到的iOS笔试面试题-C语言
    对AFN的二次封装
    李洪强经典面试题39-iOS 程序员 6 级考试(答案和解释)
    iOS五种本地缓存数据方式
    iOS开发网络篇—数据缓存
    iOS中的通知
    李洪强漫谈iOS开发[C语言-048]-打印平方表
    李洪强漫谈iOS开发[C语言-047]-数列求和
  • 原文地址:https://www.cnblogs.com/yelaiju/p/1813474.html
Copyright © 2011-2022 走看看