守护线程C语言windows,C言语如何利用子线程刷新主线程

本文介绍了如何在C语言中利用子线程实时更新主线程的控件显示,如显示时间及进行加法运算。通过创建后台线程分别进行时间获取和加法计算,并使用委托回调方法在主线程中安全地更新UI。这种方式确保了UI的流畅响应,避免了阻塞。
摘要由CSDN通过智能技术生成

C言语如何利用子线程刷新主线程

你知道C言语如何利用子线程刷新主线程吗?使用子线程进行时间操作和加法操作,然后刷新主线程的控件显示结果。下面是小编为大家带来的关于C言语如何利用子线程刷新主线程的知识,欢迎阅读。

C言语如何利用子线程刷新主线程

使用线程操作

1、实时显示当前时间

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

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

using System;

using System.Threading;

using System.Windows.Forms;

namespace WinThread

{

public partial class frmMain : Form

{

public frmMain()

{

InitializeComponent();

}

///

/// 初始化

///

///

///

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 显示时间操作

///

/// 取得实时时间

///

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);

///

/// 实时显示时间

///

///

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 加法操作

///

/// 加法操作

///

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);

///

/// 显示结果

///

///

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言语如何利用子线程刷新主线程】相关文章:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值