Wait for n seconds, then next line of code without freezing form

前端 未结 4 1526
长发绾君心
长发绾君心 2020-12-15 20:45

Hi I am trying to find a method of waiting a number of milliseconds before moving to the next line of code,

I have looked into Thread.Sleep but this will freeze the

相关标签:
4条回答
  • 2020-12-15 21:13

    The await keyword, in conjunction with Task.Delay makes this trivial.

    public async Task Foo()
    {
        await Task.Delay(2000);
        txtConsole.AppendText("Waiting...");
        DoStuff();
    }
    
    0 讨论(0)
  • 2020-12-15 21:14

    Timer should work fine in this case, unless you put Thread.Sleep in its handler or the handler itself takes too much time to complete.

    You haven't specified the UI framework that you use or .Net version, but for the latest .Net you can use async/await. That way, UI would not be frozen while your code awaits for the background task

    void async MyMethod()
    {  
        var result = await Task.Run(() => long_running_code);
    }
    
    0 讨论(0)
  • 2020-12-15 21:16
    DateTime Tthen = DateTime.Now;
                do
                {
                    Application.DoEvents();
                } while (Tthen.AddSeconds(5) > DateTime.Now);    
    
    0 讨论(0)
  • 2020-12-15 21:23

    Try using a DispatcherTimer. It's a pretty handy object that does all the work of delegating to the UI thread.

    For example:

    private DispatcherTimer _dtTimer = null;
    
    public Constructor1(){
      _dtTimer = new DispatcherTimer();
      _dtTimer.Tick += new System.EventHandler(HandleTick);
      _dtTimer.Interval = new TimeSpan(0, 0, 0, 2); //Timespan of 2 seconds
      _dtTimer.Start();
    }
    
    private void HandleTick(object sender, System.EventArgs e) {
      _uiTextBlock.Text = "Timer ticked!";
    }
    
    0 讨论(0)
提交回复
热议问题