手机
当前位置:查字典教程网 >编程开发 >C#教程 >C#利用子线程刷新主线程分享教程
C#利用子线程刷新主线程分享教程
摘要:要求:如下图,使用线程操作1、实时显示当前时间2、输入加数和被加数,自动出现结果分析:两个问题解决的方式一致,使用子线程进行时间操作和加法操...

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

1、实时显示当前时间

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

C#利用子线程刷新主线程分享教程1

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

复制代码 代码如下:

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

}

}

是不是很简单呢?

【C#利用子线程刷新主线程分享教程】相关文章:

C#最简单的关闭子窗体更新父窗体的实现方法

浅解关于C#多线程的介绍

C# 判断字符串为空的几种办法

C#实现通过程序自动抓取远程Web网页信息的代码

C# 的关键字详细介绍

C# 骑士飞行棋的源码(分享)

C#动态执行字符串(动态创建代码)的实例代码

C#获取进程的主窗口句柄的实现方法

C#日期转换函数分享

c#调用存储过程实现登录界面详解

精品推荐
分类导航