• 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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    响应式设计
    Flex box 弹性盒子布局
    下拉菜单  -
    html使用技巧
    nth-of-type(n)
    Js中 关于top、clientTop、scrollTop、offsetTop
    仿iPhone滑屏操作
    网页超过一页 点击回到顶部
    linux svn使用
    Linux查看CPU和内存使用情况
  • 原文地址:https://www.cnblogs.com/yelaiju/p/1813474.html
Copyright © 2020-2023  润新知