我正在尝试在循环中使用计时器做一些事情,并且在计时器完成其工作之后,应用程序在循环中开始另一个转弯。但是因为我不知道如何在计时器运行时让主线程停止运行,主线程立即进入下一轮。
我做了一些关于锁的事。
这是循环
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中运行到监视器时,这给了我一个例外:对象同步方法是从一个不同步的代码块调用的。
有什么解决方案吗?或者我可以用其他方式达到我的目标?
谢谢!
答案 0 :(得分:1)
如果你想让当前线程阻塞一个设定的时间跨度,你可以使用Thread.Sleep(TimeSpan) https://msdn.microsoft.com/en-us/library/274eh01d(v=vs.110).aspx
您不需要使用其他线程。