解决界面卡死的问题

1.使用多线程

private void textBox2_TextChanged(object sender, EventArgs e)
{
    int count = dataGridView1.Rows.GetRowCount(DataGridViewElementStates.Visible);
    label2.Text = "on";
    Thread objThread = new Thread(new ThreadStart(delegate
    {
        string Temp = textBox2.Text.Trim();
        for (int i = 0; i < count - 1; i++)
        {
            if (!dataGridView1.Rows[i].Cells[0].Value.ToString().ToUpper().Contains(Temp))
            {
                dataGridView1.Rows[i].Visible = false;
            }
        }
    }));
    objThread.Start();
}

添加以下代码,忽略控件多线程的安全机制:

Control.CheckForIllegalCrossThreadCalls = false;

2.使用委托

3.Invoke

原文地址:https://www.cnblogs.com/jizhiqiliao/p/9870744.html

时间: 2024-10-10 21:31:12

解决界面卡死的问题的相关文章

WPF 解决界面卡死

工作中的项目,CS客户端会通过MQ接收前端设备发送的信息,之前测试的时候,由于测试的数据不大,没有进行压力测试,软件可以正常工作,随着项目现场设备数量的增加,CS客户端从MQ中订阅的数据量不断增加,最终导致,客户端界面卡死.原来的数据流程图如下: 这个数据流程,在数据不大的情况下,是没有什么问题,数据太多,从mq获取数据的流程太长,不管是Json反序列化,还是WPF界面渲染,都是耗时比较大.所以决定将数据流程改为如下所示: 修改后的方案,将原来的一个流程拆分两个流程,左边的流程只负责从mq取数据

多线程、委托、Invoke解决winform界面卡死的问题,并带开关

一.知识点介绍 1,更新控件的内容,应该调用控件的Invoke方法. Invoke指: 在拥有控件的基础窗口句柄的线程上,用指定的参数列表执行指定委托.该方法接收一个委托类型和委托的参数,因此需要定义委托类型变量,然后传递给Invoke方法. 如果其他线程直接调用方法更新控件内容,报错:线程间操作无效: 从不是创建控件“richTextBox1”的线程访问它. 2,委托的本质是某一类型的方法,这些方法具有相同的参数和返回类型. 委托类似于C语言中的函数指针,可以指向多个相同类型的函数. 定义委托

Dispatcher.BeginInvoke()方法使用不当导致UI界面卡死的原因分析

原文:Dispatcher.BeginInvoke()方法使用不当导致UI界面卡死的原因分析 前段时间,公司同事开发了一个小工具,在工具执行过程中,UI界面一直处于卡死状态. 通过阅读代码发现,主要是由于Dispatcher.BeginInvoke()方法使用不当导致的. 本文将通过一个WPF模拟程序来演示一下界面卡死的现象,并通过修改代码来解决界面卡死的问题. 希望通过对本文的学习,大家能对Dispatcher.BeginInvoke()方法有一个新的认识. 文章开篇直接给出界面卡死的示例代码

Thread.Sleep()导致界面卡死问题

最近开发一个界面,为了实现界面延时自动关闭,加了一句代码Thread.Sleep(2000).开发过程中未发现问题.后来测试发现,如果这个时候点击界面,会导致系统崩溃. 于是找了一些资料,得到如下解决办法: Thread t = new Thread(o => Thread.Sleep(2000)); t.Start(this); while (t.IsAlive) { //防止UI假死 Application.DoEvents(); } Application.DoEvents()方法本身就是

WinForm多线程+委托防止界面卡死

1.当有大量数据需要计算.显示在界面或者调用sleep函数时,容易导致界面卡死,可以采用多线程加委托的方法解决 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; using System

winform批量更新数据_长时间的执行会导致界面卡死

原文:winform批量更新数据_长时间的执行会导致界面卡死 前言:使用winform触发一个事件后执行的代码,如果耗时非常长,则会导致窗口界面假死!  本人最近通过winform窗体执行一项:需要批量更新一批数据库的数据的操作的任务时,由于数据量达到百万级别,非常耗时,只能慢慢更新,慢慢执行. 但是,在执行的过程遇到了一个奇葩的问题:窗体在调试状态下,代码可以慢慢循环执行,没出现异常.  但是我单独运行EXE程序时,就必现:程序假死,未响应状态. 后台百度虽然没有找到直接的答案,但是也发现了原

C# 串口关闭时主界面卡死原因分析

原文:C# 串口关闭时主界面卡死原因分析 问题描述 前几天用SerialPort类写一个串口的测试程序,关闭串口的时候会让界面卡死. 参考博客windows程序界面卡死的原因,得出界面卡死原因:主线程和其他的线程由于资源或者锁争夺,出现了死锁. 参考知乎文章WinForm界面假死,如何判断其卡在代码中的哪一步?,通过点击调试暂停,查看ui线程函数栈,直接定位阻塞代码的行数,确定问题出现在SerialPort类的Close()方法. 参考文章C# 串口操作系列(2) -- 入门篇,为什么我的串口程

c#界面卡死处理方法

方法一: 设置属性: Control.CheckForIllegalCrossThreadCalls = false; 开启一个新线程 Thread th = new Thread(() => Search(detailID.Trim())); th.IsBackground = true; th.Start(); public void Search(string detailID) { dataGridView1.DataSource =BLLBillConsume.BllGetClearM

winform防止界面卡死的三种方法

在编程过程中经常会遇到耗时操作,这个时候如果不采取一些必要的异步操作,就会导致界面的卡死,这里以winform为例子,介绍三种方法防止界面卡死,对这几个方法稍加修改同样适用于wpf,silverlight等程序 首先给出一个函数模拟耗时操作 1使用委托+QueueUserWorkItem delegate void ChangeInvoke(int num) ; private void ChangeNum(int num) { MessageBox.Show(num.ToString());