当前位置:   article > 正文

C#上位机后台数据更新与前端UI数据更新界面不卡滞_c# 生成数据不卡界面

c# 生成数据不卡界面

C#上位机后台数据更新与前端UI数据更新界面不卡滞方法:多线程 & 委托

//comment:界面内需要加载backgroundWorker1控件(位于:工具->组件 内)

//创建委托用于线程内更新UI控件数据
delegate void delegate_updateUI(ListViewItem listViewItem);
//与委托配套的更新UI控件数据的方法
private void updateUI(ListViewItem listViewItem)
{
    listView1.Items.Add(listViewItem);
}
//按钮启动线程
private void button1_Click(object sender, EventArgs e)
{
    this.backgroundWorker1.RunWorkerAsync();//调用RunWorkerAsync()方法,会触发DoWork事件
}
//耗时的工作在下面事件中进行:后台默默处理大量数据的地方(关于界面控件的东西,这里不要出现,比如给控件赋值,这里不要出现)
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    backgroundWorker1.WorkerReportsProgress = true;
    while (true)
    {
        int i = 0;
        for (; i <= progressBar1.Maximum; i++)
        {
            if (backgroundWorker1.CancellationPending)
                backgroundWorker1.ReportProgress(i, string.Format("{0}%,操作被中断", i));//要结合goto语句到while(true)前同时true替换为!backgroundWorker1.CancellationPending才能生效
            backgroundWorker1.ReportProgress(i, String.Format("{0}%", i));
            System.Threading.Thread.Sleep(1);//Sleep时间不限 但必须要有,否则程序会完全卡滞在while里运行
            
            ListViewItem listViewItem = new ListViewItem();
            listViewItem.Text = i + "";
            listViewItem.SubItems.Add("A");
            listViewItem.SubItems.Add("B");
            this.BeginInvoke(new delegate_updateUI(updateUI), listViewItem);//线程内调用委托去更新UI数据
            //若后台线程在更新UI界面且不需要等待,则使用BeginInvoke方法进行异步操作(调用之后立即返回,不会等待修改控件代码执行完,不会阻塞)
            //若后台线程在更新UI界面并且需要等待,则使用Invoke方法进行同步操作(会等待代码运行完之后返回,线程会阻塞)
        }
    }
}
//耗时线程内的backgroundWorker1.ReportProgress(i)有数据更新时执行的操作(此函数可以更新界面参数)
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    progressBar1.Value=e.ProgressPercentage;
    label1.Text=e.UserState.ToString();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

效果图如下
在这里插入图片描述

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号