我想执行一个有返回值的方法,这个方法里面启动timer,如果timer的Tick事件里面有结果不为null则停止执行,返回相应值,或者Tick事件里面timer停止了,则将返回值,返回。
大概意思是以下的代码,但肯定有错。
private DispatcherTimer Tiemr = new DispatcherTimer();
private int Times = 90;
public IDCardInfo GetIDCardInfo( out string errorMsg)
{
Tiemr.Tick += new EventHandler(TimerCount);
Tiemr.Interval = new TimeSpan(0, 0, 0, 1, 0);
Tiemr.Start();
}
public EztModel.IDCardInfo TimerCount(object sender, EventArgs e)
{
IDCardInfo IDCardInfoModel = new IDCardInfo();
if (Times - 1 <= 0)
{
Tiemr.Stop();
return null;
}
else
{
#region 读取
IDCardData CardMsg = new IDCardData();
if (IDRead(1001) == 0)
{
IDCardInfoModel = new EztModel.IDCardInfo();
IDCardInfoModel.Patient_Name = CardMsg.Name;
Tiemr.Stop();
return IDCardInfoModel;
}
else
{
Times--;
return null;
}
#endregion
}
}
代码是错误的,有没有类似实现该功能的方法
用线程搞定了,谢谢大家~
主要代码~
ReadIDCardThread = new System.Threading.Thread(new System.Threading.ThreadStart(RunThread));
ReadIDCardThread.Priority = System.Threading.ThreadPriority.Lowest;
int runTimes = 0;
while(IDCardInfoModel == null && runTimes <= times)
{
runTimes++;
RunThread();
System.Threading.Thread.Sleep(1000);
}
你这个要求有点高,你应该在执行该方法的时候,传递一个Func或者Action进去,在Timer停止的时候,调用这个Func或者Action。
用回调的思路来实现,非要返回值,就只能阻塞,这是不合理的。
想了一个线程的方法,如果没有值,就sleep(1)一秒钟,然后再执行,知道执行90秒,如果没有值,则返回null,如果中间有值则直接返回值。
@shadow_飛: 你在多线程中进行阻塞,也还是可取的。不过既然要接受多线程的返回值,也还是类似回调的做法。
@shadow_飛: 不是回答你了么~回调函数就是思路啊。
你的代码思路是有问题的,不如直接说你想实现的模拟场景,让别人告诉你如何用代码实现好了。
你的编程思路是有问题.在定时器里调用你要操作的方法传入参数吧.当作你说的返回值了