Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用计时器暂停线程而不中断其他线程执行的UI事件_C#_Timer - Fatal编程技术网

C# 使用计时器暂停线程而不中断其他线程执行的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

我正在研究这一点,并对如何尽可能干净地执行这一点感到困惑。我的想法是,在继续逻辑之前,我有一个线程暂停指定的秒数,同时让其他线程操作UI

以下是我所了解到的,但它不起作用并抛出错误:

    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造成的。