110,536
社区成员
发帖
与我相关
我的任务
分享
public double GetTemp()
{
var a=....
return a;
}
ThreadPool.QueueUserWorkItem(state => doit());
var temp=GetTemp();
do
{
temp=GetTemp();
Application.DoEvents();
Thread.Sleep(1000);
}while(temp>18)
//准备一个WaitHandle
EventWaitHandle w;
//检测温度
void CheckTemp(object sender, ElapsedEventArgs e) {
if (GetTemp() > 18) {
((Timer)sender).Enabled = false;
w.Set();
}
}
//启动计时器
var t = new Timer(1000);
t.Elasped += CheckTemp;
t.Enable = true;
//然后等待
w.WaitOne();
//下面继续还有别的代码
var UIContext = SynchronizationContext.Current;//UI主线程
//每分钟执行一次获取
var source = Observable.Interval(TimeSpan.FromMilliseconds(1000)).Select(p =>
{
return 1; //你获取温度的代码,我这里简单写就写成1
});
var stop= source.Where(p => p > 6);//设置停止条件
//获取执行结果,直到停止条件为真,同时设定工作线程为UI主线程,避免下面的操作产生跨线程调用错误
var temps = source.TakeUntil(source).ObserveOn(UIContext).Subscribe(p =>
{
更新界面的代码;
});