萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 編程語言綜合 >> C#利用子線程刷新主線程

C#利用子線程刷新主線程

使用線程操作

1、實時顯示當前時間 2、輸入加數和被加數,自動出現結果 分析:兩個問題解決的方式一致,使用子線程進行時間操作和加法操作,然後刷新主線程的控件顯示結果  
using System;
 using System.Threading;
 using System.Windows.Forms;
 
 namespace WinThread
 {
     public partial class frmMain : Form
     {
         public frmMain()
         {
             InitializeComponent();
         }
 
         /// <summary>
         /// 初始化
         /// </summary>
         /// <param name="sender"></param>
         /// <param name="e"></param>
         private void frmMain_Load(object sender, EventArgs e)
         {
             // 控件初始化
             this.txtOne.Text = "0";
             this.txtSecond.Text = "0";
 
             // 顯示時間操作
             Thread showTimeThread = new Thread(new ThreadStart(GetTime));
             showTimeThread.IsBackground = true;
             showTimeThread.Start();
 
             // 加法操作
             Thread addThread = new Thread(new ThreadStart(Add));
             addThread.IsBackground = true;
             addThread.Start();
         }
 
         #region 顯示時間操作
 
         /// <summary>
         /// 取得實時時間
         /// </summary>
         private void GetTime()
         {
             try
             {
                 while (true)
                 {
                     string currentTime = string.Format("{0}.{1}", DateTime.Now.ToLongTimeString(),
                               DateTime.Now.Millisecond);
 
                     ShowTime(currentTime);
 
                     Application.DoEvents();
                 }
             }
             catch (Exception ex)
             {
                 Console.WriteLine(ex.Message);
             }
         }
 
         // 定義顯示時間操作委托,用於回調顯示時間方法
         delegate void ShowTimeCallBack(string str);
 
         /// <summary>
         /// 實時顯示時間
         /// </summary>
         /// <param name="str"></param>
         private void ShowTime(string str)
         {
             if (this.txtCurrentTime.InvokeRequired)
             {
                 ShowTimeCallBack showTimeCallBack = new ShowTimeCallBack(ShowTime);
                 this.Invoke(showTimeCallBack, new object[] { str });
             }
             else
             {
                 this.txtCurrentTime.Text = str;
             }
         }
 
         #endregion
 
         #region 加法操作
 
         /// <summary>
         /// 加法操作
         /// </summary>
         private void Add()
         {
             try
             {
                 while (true)
                 {
                     int i = Convert.ToInt32(this.txtOne.Text.Trim());
                     int j = Convert.ToInt32(this.txtSecond.Text.Trim());
 
                     ShowResult((i + j).ToString());
 
                     Application.DoEvents();
                 }
             }
             catch (Exception ex)
             {
                 Console.WriteLine(ex.Message);
             }
         }
 
         // 定義加法操作委托,用於回調加法操作方法
         delegate void ShowResultCallBack(string result);
 
         /// <summary>
         /// 顯示結果
         /// </summary>
         /// <param name="result"></param>
         private void ShowResult(string result)
         {
             if (this.txtResult.InvokeRequired)
             {
                 // 寫法1
                 //ShowResultCallBack showResultCallBack = new ShowResultCallBack(ShowResult);
                 //this.Invoke(showResultCallBack, new object[] { result });
                 
                 // 寫法2
                 //使用委托來賦值
                 this.txtResult.Invoke(
                     //委托方法
                     new ShowResultCallBack(ShowResult),
                     new object[] { result });
             }
             else
             {
                 this.txtResult.Text = result;
             }
         }
 
         #endregion
     }
 }
copyright © 萬盛學電腦網 all rights reserved