当我们的界面需要在程序运行中不断更新数据时,当一个textbox的数据需要变化时,为了让程序执行中不出现界面 卡死 的现像,最好的方法就是 多线程 来解决
一个主线程来 创建 界面,使用一个子线程来执行程序并 更新 主界面

这个问题其实也困或了我很久,但是今天终于解决了,而且我发现很多人有这样的问题,所以我分享一个例子方便大家参考吧。
先来看看我的界面

当我点击开启线程后

下面是我的代码

namespace 多线程防止界面卡死

{
    public partial class Form1 : Form
    {
        public delegate void UpdateText(string msg);
        public delegate void ErrorText();
        public UpdateText updateText;
        public ErrorText mErrorText;

public Form1()
        {
            InitializeComponent();
        }

public void errorText()
        {
            MessageBox.Show("请输入数字");
            textBox1.Text = "";
            textBox1.Focus();
        }

public void MyUpdateText(string msg)
        {
            textBox2.AppendText(msg + "\r\n");
            textBox2.ScrollToCaret();
        }

public void ThreadMethodTxt(int n)
        {
            this.BeginInvoke(updateText, "线程开始执行,执行" + n + "次,每一秒执行一次");
            for (int i = 0; i < n; i++)
            {
                this.BeginInvoke(updateText, i.ToString());
                Thread.Sleep(1000);
            }
            this.BeginInvoke(updateText, "线程结束");
        }

private void button1_Click(object sender, EventArgs e)
        {
            int n = 0;
            Thread thread = new Thread(new ThreadStart(delegate {
                try
                {
                    n = Convert.ToInt32(textBox1.Text.Trim());
                }
                catch (Exception)
                {
                    this.Invoke(mErrorText);
                    return;
                    throw;
                }
                ThreadMethodTxt(n);
            }));
            thread.IsBackground = true;
            thread.Start();
        }

private void Form1_Load(object sender, EventArgs e)
        {
            updateText = new UpdateText(MyUpdateText);
            mErrorText = new ErrorText(errorText);
            this.AcceptButton = button1;
        }

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
        }

}

}

从代码可以看出,我的做法是使用委托和BeginInvoke方法实现。

c#多线程防止界面卡死相关推荐

  1. c# 多线程界面卡顿_C#多线程解决界面卡死问题的完美解决方案

    文章下最方有源码下载 问题描述: 当我们的界面需要在程序运行中不断更新数据时,当一个textbox的数据需要变化时. 为了让程序执行中不出现界面卡死的现像,最好的方法就是更新主界面,这样就不会出现卡死 ...

  2. VB.Net 解决winForm界面卡死

    问题,利用多线程解决界面卡死时,控件不能在新建的线程中访问. 解决方法, 可使用Invoke或BeginInvoke,在拥有此控件的基础窗口句柄的线程上执行指定的委托. Invoke 方法 (Dele ...

  3. wxPython多线程界面卡死或在不同平台崩溃问题

    一.测试程序界面 二.不使用多线程代码如下(当点击开启日志的时候,直接导致界面卡死) #coding:utf-8 import sys import threading import time imp ...

  4. C#多线程操作界面控件的解决方案

    C#中利用委托实现多线程跨线程操作 - 张小鱼 2010-10-22 08:38 在使用VS2005的时候,如果你从非创建这个控件的线程中访问这个控件或者操作这个控件的话就会抛出这个异常.这是微软为了 ...

  5. 二、UI线程和界面卡死

    上回说到,在Windows窗体程序中,响应Windows消息的线程就被称做Windows窗体程序的UI线程.UI线程还有一个重要的功能是创建和管理窗体和窗体中的各种控件,负责他们的实时刷新,如果UI线 ...

  6. Centos7解决图形界面卡死问题

    Centos7解决图形界面卡死问题 参考文章: (1)Centos7解决图形界面卡死问题 (2)https://www.cnblogs.com/yzfdjzwl/p/6636274.html 备忘一下 ...

  7. Qt中多线程与界面组件的通信

    文章目录 1 多线程与界面组件的通信 1.1 通过信号与槽实现多线程与界面组件的通信 1.2 通过自定义事件实现多线程与界面组件的通信 1 多线程与界面组件的通信 有趣的问题: 是否可以在子线程中创建 ...

  8. 微信团队披露:微信界面卡死超级bug“15。。。。”的来龙去脉

    1.微信超级Bug 大家好,给大家介绍一下,这是Bug: 应该有很多Android的用户熟悉上面这图. (本文同步发布于:http://www.52im.net/thread-1099-1-1.htm ...

  9. ubuntu 登录界面卡死解决方法

    ubuntu 登录界面卡死解决方法 一.问题 二.解决方法 一.问题 ubuntu 图形界面卡死在登录界面,无法登录鼠标也动不了,重启无效.但远程登录的时候没有任何问题. 二.解决方法 sudo ap ...

最新文章

  1. SQL Server:OA权限管理设计的实现 下
  2. Java设计模式10:观察者模式
  3. XScuGic_Connect分析
  4. 【互联网大会】微信小程序斩获大奖 马化腾谈小程序开发生态
  5. 高清网络视频无损FLV教程
  6. 软件_聚合搜索引擎[博]
  7. #import和@class 的区别
  8. Atlassian 域名被曝一次点击账户接管漏洞 可导致供应链攻击
  9. JMeter 检查点之响应断言(Response Assertion)
  10. ACM 学习笔记(五) 动态规划
  11. 让我们用心感受泛型接口的协变和抗变out和in
  12. ILSpy .NET反编译工具下载地址
  13. 新能源汽车行业资讯-2022-9-19
  14. 读书笔记:《一分钟超强笔记本》
  15. 绝对收敛级数重排定理的证明
  16. 压缩感知稀疏基之离散余弦变换(DCT)和离散正弦变换(DST)
  17. 复杂业务系统的架构设计思路
  18. module xxx missing dependencies
  19. 三色求组合。从5个红球、5个蓝球、5个白球中任意取出8个球作为一组,要求每组中可以没有白球,但必须有红球和蓝球。 输出各种可能的取球组合。
  20. 【第二季】Arcgis地图制图基础|(五)活用智能标注

热门文章

  1. 记录下制作Ubuntu启动U盘踩的坑
  2. 在洋葱(Onion)架构中实现领域驱动设计
  3. 看图工具、测试移动端
  4. 友豆火山CPG插件开发001-简介初识
  5. pkl转换json(pkl格式如何打开,pkl2json)
  6. 银联支付(一)申请测试环境,并运行测试demo(在线网关支付)
  7. 私域生态中的“消费者共创”:超级用户如何让Lego重焕生机
  8. 如何理解行高和高度?
  9. MySql 5.7 详细参数说明
  10. android屏幕截屏