程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> 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
         }
     }
    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved