C# 使用计时器暂停线程而不中断其他线程执行的UI事件
我正在研究这一点,并对如何尽可能干净地执行这一点感到困惑。我的想法是,在继续逻辑之前,我有一个线程暂停指定的秒数,同时让其他线程操作UI 以下是我所了解到的,但它不起作用并抛出错误:C# 使用计时器暂停线程而不中断其他线程执行的UI事件,c#,timer,C#,Timer,我正在研究这一点,并对如何尽可能干净地执行这一点感到困惑。我的想法是,在继续逻辑之前,我有一个线程暂停指定的秒数,同时让其他线程操作UI 以下是我所了解到的,但它不起作用并抛出错误: public static int f_sleep(int time) { /* System.DateTime now = System.DateTime.Now; System.TimeSpan duration = new System.Time
public static int f_sleep(int time)
{
/*
System.DateTime now = System.DateTime.Now;
System.TimeSpan duration = new System.TimeSpan(0, 0, 0, time);
System.DateTime then = now.Add(duration);
while (then > DateTime.Now)
{
Application.DoEvents();
Thread.Sleep(10);
}
while (session.automation_lock == true)
{
Thread.Sleep(6000);
}
if (session.automation_stop == true)
{
Thread.CurrentThread.Abort();
}
GC.Collect();
GC.WaitForPendingFinalizers();
*/
System.Threading.Timer timer = new System.Threading.Timer(o => f_sleep_timer_tick(timer), null, time, -1);
timer.start();
return 1;
}
public static void f_sleep_timer_tick(System.Threading.Timer timer)
{
timer.Stop();
}
注意,我对我过去处理休息的方式进行了评论,因为我认为这会导致挂断。你觉得我以前的方式怎么样?此外,您可以看到我正在尝试定义一个计时器,并将其发送到tick方法中,这样我就不必定义全局计时器。但我知道我做错了。我只想让计时器滴答一次(滴答是x秒),然后通过f_sleep返回1来继续线程逻辑,告诉线程的逻辑现在可以继续了 对不起,我很好奇,这个解决方案有哪些优点?为什么你不使用一个简单的线程。睡眠(时间)你到底想完成什么?上面的代码是否在UI线程上执行?在UI线程上调用Thread.Sleep()将导致UI冻结。。。如果这不在UI线程上,为什么要调用DoEvents?GC.对方付费电话是干什么的?重复另外两个说的话。。。你的实际目标是什么?有一些线程原语可以处理最常见的场景。@Pluka你知道,现在可能就足够了。我担心它会阻止我的线程调用的委托加载到我的UI上(我正在使用多线程驱动嵌入到选项卡控件中的Windows浏览器控件)。GC代码是我减少内存泄漏的尝试。但我不确定他们是否真的有帮助。我面临的内存泄漏是由Internet Explorer造成的。