在计时器运行时阻塞主线程C#

时间:2016-12-30 16:18:09

标签: c# multithreading timer synchronization

我正在尝试在循环中使用计时器做一些事情,并且在计时器完成其工作之后,应用程序在循环中开始另一个转弯。但是因为我不知道如何在计时器运行时让主线程停止运行,主线程立即进入下一轮。

我做了一些关于锁的事。

这是循环

t_tick = (senders, args) =>
{

   if (condition)
   {   
      //do something
   }
   else
   {
      //do something
      Monitor.Exit(AirplaneManager.locker);
      t.Stop();
   }
};
t.Tick += t_tick;
t.Interval = 30;
t.Start();

然后是计时器里面的代码

   if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CALENDAR) != PackageManager.PERMISSION_GRANTED) {

    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CALENDAR},
            MY_PERMISSIONS_REQUEST_READ_CONTACTS);
}

但是当代码在timer中运行到监视器时,这给了我一个例外:对象同步方法是从一个不同步的代码块调用的。

有什么解决方案吗?或者我可以用其他方式达到我的目标?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果你想让当前线程阻塞一个设定的时间跨度,你可以使用Thread.Sleep(TimeSpan) https://msdn.microsoft.com/en-us/library/274eh01d(v=vs.110).aspx

您不需要使用其他线程。