WEB开发网
开发学院WEB开发ASP.NET C#利用子线程刷新主线程 阅读

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

 2012-11-22 09:29:45 来源:WEB开发网   
核心提示: 使用线程操作1、实时显示当前时间2、输入加数和被加数,自动出现结果分析:两个问题解决的方式一致,C#利用子线程刷新主线程,使用子线程进行时间操作和加法操作,然后刷新主线程的控件显示结果 using System; using System.Threading; using System.Windows.Forms;

 使用线程操作

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
     }
 }

Tags:利用 线程 刷新

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接