【原】C#子线程刷新主线程一例

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

1、实时显示当前时间

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

【原】C#子线程刷新主线程一例

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

  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 }

是不是很简单呢?

 

你可能感兴趣的:(C#)