zoukankan      html  css  js  c++  java
  • 【原】C#子线程刷新主线程一例

    要求:如下图,使用线程操作

    1、实时显示当前时间

    2、输入加数和被加数,自动出现结果

    分析:两个问题解决的方式一致,使用子线程进行时间操作和加法操作,然后刷新主线程的控件显示结果

      1 using System;
      2 using System.Threading;
      3 using System.Windows.Forms;
      4 
      5 namespace WinThread
      6 {
      7     public partial class frmMain : Form
      8     {
      9         public frmMain()
     10         {
     11             InitializeComponent();
     12         }
     13 
     14         /// <summary>
     15         /// 初始化
     16         /// </summary>
     17         /// <param name="sender"></param>
     18         /// <param name="e"></param>
     19         private void frmMain_Load(object sender, EventArgs e)
     20         {
     21             // 控件初始化
     22             this.txtOne.Text = "0";
     23             this.txtSecond.Text = "0";
     24 
     25             // 显示时间操作
     26             Thread showTimeThread = new Thread(new ThreadStart(GetTime));
     27             showTimeThread.IsBackground = true;
     28             showTimeThread.Start();
     29 
     30             // 加法操作
     31             Thread addThread = new Thread(new ThreadStart(Add));
     32             addThread.IsBackground = true;
     33             addThread.Start();
     34         }
     35 
     36         #region 显示时间操作
     37 
     38         /// <summary>
     39         /// 取得实时时间
     40         /// </summary>
     41         private void GetTime()
     42         {
     43             try
     44             {
     45                 while (true)
     46                 {
     47                     string currentTime = string.Format("{0}.{1}", DateTime.Now.ToLongTimeString(), DateTime.Now.Millisecond);
     48 
     49                     ShowTime(currentTime);
     50 
     51                     Application.DoEvents();
     52                 }
     53             }
     54             catch (Exception ex)
     55             {
     56                 Console.WriteLine(ex.Message);
     57             }
     58         }
     59 
     60         // 定义显示时间操作委托,用于回调显示时间方法
     61         delegate void ShowTimeCallBack(string str);
     62 
     63         /// <summary>
     64         /// 实时显示时间
     65         /// </summary>
     66         /// <param name="str"></param>
     67         private void ShowTime(string str)
     68         {
     69             if (this.txtCurrentTime.InvokeRequired)
     70             {
     71                 ShowTimeCallBack showTimeCallBack = new ShowTimeCallBack(ShowTime);
     72                 this.Invoke(showTimeCallBack, new object[] { str });
     73             }
     74             else
     75             {
     76                 this.txtCurrentTime.Text = str;
     77             }
     78         }
     79 
     80         #endregion
     81 
     82         #region 加法操作
     83 
     84         /// <summary>
     85         /// 加法操作
     86         /// </summary>
     87         private void Add()
     88         {
     89             try
     90             {
     91                 while (true)
     92                 {
     93                     int i = Convert.ToInt32(this.txtOne.Text.Trim());
     94                     int j = Convert.ToInt32(this.txtSecond.Text.Trim());
     95 
     96                     ShowResult((i + j).ToString());
     97 
     98                     Application.DoEvents();
     99                 }
    100             }
    101             catch (Exception ex)
    102             {
    103                 Console.WriteLine(ex.Message);
    104             }
    105         }
    106 
    107         // 定义加法操作委托,用于回调加法操作方法
    108         delegate void ShowResultCallBack(string result);
    109 
    110         /// <summary>
    111         /// 显示结果
    112         /// </summary>
    113         /// <param name="result"></param>
    114         private void ShowResult(string result)
    115         {
    116             if (this.txtResult.InvokeRequired)
    117             {
    118                 // 写法1
    119                 //ShowResultCallBack showResultCallBack = new ShowResultCallBack(ShowResult);
    120                 //this.Invoke(showResultCallBack, new object[] { result });
    121                 
    122                 // 写法2
    123                 //使用委托来赋值
    124                 this.txtResult.Invoke(
    125                     //委托方法
    126                     new ShowResultCallBack(ShowResult),
    127                     new object[] { result });
    128             }
    129             else
    130             {
    131                 this.txtResult.Text = result;
    132             }
    133         }
    134 
    135         #endregion
    136     }
    137 }

    是不是很简单呢?

     

  • 相关阅读:
    HL极大算子弱(1,1)范数趋于无穷, 当维数趋于无穷
    Stein's Maximal principle
    课程: 广义相对论和波方程
    关于球乘子和BochnerRiesz乘子的相关文献
    The Hardy Uncertainty Principle
    Mar. 22 10:0011:30, 1569, "Global wellposedness for the nonlinear Schrodinger equation with derivative in energy space" by Yifei Wu
    Several questions regarding construction of functions
    通知: 强化班<调和分析与PDE>3月26日的课程 改到3月21 晚上6:009:00 地点不变
    ADO.NET Entity Framework 入门示例向导
    JavaScript 定义类方法
  • 原文地址:https://www.cnblogs.com/iflytek/p/2781926.html
Copyright © 2011-2022 走看看