使用線程操作
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 } }