C#Visual Studio-等待3秒钟,在方法结束时做一些事情,并终止计时器
本文关键字:终止 计时器 等待 Studio- 3秒钟 结束 方法 C#Visual | 更新日期: 2023-09-27 18:28:13
我正在写一个模拟《大学学生历险记》的"游戏",我已经做了几个表格,但我仍然需要一个表格来不等待用户输入,而是检查我是否希望现在运行游戏事件,如果不希望,请等待几秒钟,然后跳到另一天,重复当天的过程。
问题是用户可以随时退出游戏,所有信息都会保存下来,所以我需要将其保留为几秒钟的一次性计时器,过期后再也不会运行。
我该如何编写一个一次性计时器或将c#代码的执行延迟几秒钟?
编辑:MessageBox.Show("我现在要等3秒钟");等待3秒。。。3秒后MessageBox.Show("自从我弹出最后一个消息框以来已经过去了3秒!");
如果您只想创建一个方法来每隔一段时间"勾选"一次,那么有几个选项。
第一个是System.Threading.Timer对象,在MSDN上有相关文档:http://msdn.microsoft.com/en-us/library/system.threading.timer%28v=vs.110%29.aspx
例如:
public void Tick(object stateInfo /* required to fit TimerCallback signature */)
{
/// add your code here
}
您的Timer实例化看起来是这样的:
System.Threading.Timer timer = new System.Threading.Timer(Tick, null, 0, 3000);
此后,Tick()将每3秒执行一次。请随意将null替换为您选择的对象,以便跟踪状态。
第二个更糟糕的选择是使用BackgroundWorker。我在其中发现的主要优势是ProgressChanged事件处理程序在主UI线程中自动调用,因此在某种意义上,您可以很容易地将其用于涉及UI的跨线程代码。以下是MSDN上的文档:http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker%28v=vs.110%29.aspx
我不认为BackgroundWorker是一个好的选择-它是用户友好的,但它并不是真正设计为无限持久或周期性激活的,所以它的使用导致了糟糕的解决方案,比如将所有DoWork代码封装在while(true)循环中,并使用Thread.Sleep()暂停执行。
第三个是System.Timers.Timer对象,它采用以毫秒为单位的Interval和挂接到某个方法中的Elapsed事件。每次间隔过去时,都会调用您的方法。相关文档如下:http://msdn.microsoft.com/en-us/library/system.timers.timer%28v=vs.110%29.aspx
请注意,所有这些工作方式略有不同,因此其中一个可能更适合您的用例。我们无法真正告诉您哪一个是最好的,因为我们现在对您的实现了解不多。
http://msdn.microsoft.com/library/system.threading.timer.aspx
static void Main(string[] args)
{
Timer tmr = new Timer(S, null, 0, 5000);
Console.Read();
}
static void S(object obj)
{
Console.WriteLine("1");
}
你可以看看这里在延时后执行一个方法,仅