首页 新闻 会员 周边

C# 如果执行一个有返回值的timer

1
悬赏园豆:40 [已解决问题] 解决于 2017-05-18 17:46

我想执行一个有返回值的方法,这个方法里面启动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
  }
}

  

问题补充:

代码是错误的,有没有类似实现该功能的方法

shadow_飛的主页 shadow_飛 | 菜鸟二级 | 园豆:217
提问于:2017-05-18 15:34
< >
分享
最佳答案
1

用线程搞定了,谢谢大家~

主要代码~
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);
}

shadow_飛 | 菜鸟二级 |园豆:217 | 2017-05-18 17:07
其他回答(3)
1

你这个要求有点高,你应该在执行该方法的时候,传递一个Func或者Action进去,在Timer停止的时候,调用这个Func或者Action。

用回调的思路来实现,非要返回值,就只能阻塞,这是不合理的。

收获园豆:20
幻天芒 | 园豆:37175 (高人七级) | 2017-05-18 16:00

想了一个线程的方法,如果没有值,就sleep(1)一秒钟,然后再执行,知道执行90秒,如果没有值,则返回null,如果中间有值则直接返回值。

支持(0) 反对(0) shadow_飛 | 园豆:217 (菜鸟二级) | 2017-05-18 16:03

@shadow_飛: 你在多线程中进行阻塞,也还是可取的。不过既然要接受多线程的返回值,也还是类似回调的做法。

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2017-05-18 16:06

@shadow_飛: 不是回答你了么~回调函数就是思路啊。

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2017-05-18 16:52
1

你的代码思路是有问题的,不如直接说你想实现的模拟场景,让别人告诉你如何用代码实现好了。

收获园豆:10
爱编程的大叔 | 园豆:30839 (高人七级) | 2017-05-18 16:05
1

你的编程思路是有问题.在定时器里调用你要操作的方法传入参数吧.当作你说的返回值了

收获园豆:10
吴瑞祥 | 园豆:29449 (高人七级) | 2017-05-18 16:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册