• 【原】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 }

    是不是很简单呢?

     

  • 相关阅读:
    杭电oj2032、2040、2042、2054、2055
    杭电oj2022-2030
    杭电oj2012-2021
    杭电oj2000-2011
    值得思考的几句话,放在这看看
    CEO 是一家创业公司的天花板
    致敬骄傲的产品人
    【新业务搭建】竞争情报业务规划及体系构建的思考——By Team
    微软威胁情报中心总经理的十句话——From John Lambert——太精辟了.......
    【调研与分析】标杆学习、知识管理和竞争情报的关系——From Team
  • 原文地址:https://www.cnblogs.com/iflytek/p/2781926.html
Copyright © 2020-2023  润新知