java左手握右手_多线程汇报状态,每秒1次

在 BackgroundWorker 的后台线程中,每秒向UI界面汇报1次状态:

后台线程

后台线程中要执行的代码都是耗时的,要适时将运行状态报告到UI界面上提供给用户。如果每运行一遍就汇报一次则显得太过频繁,影响了效率。选择每秒汇报一次则比较合适。

private void backgroundWork1_DoWork(object sender, DoWorkEventArgs e)

{

var worker = sender as BackgroundWorker;

var watch = new StopWatch();

watch.Start();

var start = watch.ElapsedMillisecond;

while(true)

{

// TODO: 耗时的操作在这里

// 1秒汇报一次

var timeSpan = watch.ElapsedMilliseconds - start;

if(timeSpan > 1000) // 1秒

{ worker.ReportProgress(0,"Hello.");

start = watch.ElapsedMilliseconds;

}

// 判断退出条件

// 放在while循环的末尾判断退出条件,是为了让退出前的最后一次运行状态也能汇报出去。

Thread.Sleep(1);

if(worker.CancellationPending)

{

worker.ReportProgress(0,"lastState");

e.Cancel = true;

return;

}

}

}

界面线程

界面线程,显示或接收软件产生的数据:

private void backgroundWork1_ProgressChanged(Object sender, ProgressChangedEventArgs e)

{

richTextBox1.AppendText(string.Format("{0}\n",e.UserState));

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值