zoukankan      html  css  js  c++  java
  • [转]多线程更新Processbar

    本文转自:http://dotnet.chinaitlab.com/CSharp/801729.html

    背景

      在用Windows Form编程时候,我们通常会遇到如此问题:

      1. 后台更新大量处理数据过程。

      2.需要把后台的Log输出到前端,以监控运行状态。

      3. 如果运行大量处理过程,前端会出现白屏状态,这样对用户不友好。

      针对此,我们需求创建多线程来处理后台。用多线程调用处理,按平常处理,是不能更新主线程的控件的,需要做特殊处理。

      代码程序如下:

      using System;

      using System.Collections.Generic;

      using System.ComponentModel;

      using System.Data;

      using System.Drawing;

      using System.Linq;

      using System.Text;

      using System.Windows.Forms;

      using System.Threading;

      namespace TestWinForm

      {

      public partial class Form1 : Form

      {

      delegate void SetValueCallback(int value);

      public Form1()

      {

      InitializeComponent();

      }

      private void btnRun_Click(object sender, EventArgs e)

      {

      Thread t = new Thread(new ThreadStart(Foo));

      t.Start();

      }

      private void Foo()

      {

      for (int i = 1; i <= 100; i++)

      {

      Thread.Sleep(100);

      SetProcessBarValue(i);

      SetLabelValue(i);

      }

      }

      private void SetLabelValue(int value)

      {

      // InvokeRequired required compares the thread ID of the

      // calling thread to the thread ID of the creating thread.

      // If these threads are different, it returns true.

      if (this.lblStatus.InvokeRequired)

      {

        SetValueCallback d = new SetValueCallback(SetLabelValue);

        this.Invoke(d, new object[] { value });

      }

      else

      {

        this.lblStatus.Text = value.ToString()+'%';

      }

      }

      private void SetProcessBarValue(int value)

      {

      // InvokeRequired required compares the thread ID of the

      // calling thread to the thread ID of the creating thread.

      // If these threads are different, it returns true.

      if (this.prbStatus.InvokeRequired)

      {

        SetValueCallback d = new SetValueCallback(SetProcessBarValue);

        this.Invoke(d, new object[] { value });

      }

      else

      {

        this.prbStatus.Value = value;

      }

      }

      }

      }

  • 相关阅读:
    JavaScript数组操作
    cxf-rs 和 swagger 的点
    cxf-rs 、spring 和 swagger 环境配置切换【github 有项目】
    (二)swagger-springmvc
    (二)spring-mvc-showcase 和 swagger-springmvc 的恩恩怨怨
    svn 创建tag
    swagger 入门
    jax-rs
    swagger core 和 swagger ui 如何关联【窥探】
    配置 struts2 时掉进 web.xml 的坑
  • 原文地址:https://www.cnblogs.com/freeliver54/p/1861743.html
Copyright © 2011-2022 走看看