none
C#如何延时而不影响程序的运行 RRS feed

  • 问题

  • thread.sleep()	在延时期间其他的代码不会运行,
    有什么方法能延时而不影响程序的正常运行
    2011年7月15日 6:04

答案

  • 你好!

    你了解一下 BackgroundWorker 类,实现代码如下:

    // 延时 5 秒弹出对话框
    using (var bg = new BackgroundWorker())
    {
      bg.DoWork += delegate { System.Threading.Thread.Sleep(5000); };
      bg.RunWorkerCompleted += delegate { MessageBox.Show("Hello!"); };
      bg.RunWorkerAsync();
    }
    


    知识改变命运,奋斗成就人生!
    2011年7月15日 7:05
    版主
  • dear

    请使用多线程或是BackgroundWorker 类别

     

        private void Form1_Load(object sender, EventArgs e)
        {
          ThreadPool.QueueUserWorkItem(new WaitCallback(startWeb),null);
          Thread.Sleep(5);//主线程休习
        }
        void startWeb(object state)
        {
          webBrowser1.Navigate("*****");
        }


    Thread.Sleep指静态方法,用于该线程;在Form1_Load方法里指的是主线程,由 ThreadPool.QueueUserWorkItem方法呼叫的是另外一条线程,所以在Form1_Load使用Tread.Sleep表示让主线程休习。以下有许多线程锁定方法
    http://www.dotblogs.com.tw/yc421206/category/4583.aspx

    使用多线程必须了解线程状态
    http://www.dotblogs.com.tw/yc421206/archive/2011/01/05/20599.aspx

     

     


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    • 已标记为答案 dry1 2011年7月16日 11:01
    2011年7月16日 7:58

全部回复

  • 您好

    程式改寫為 Multi Thread,將您要延時的 Thread 做 Sleep


    歡迎參觀我的Blog.NET菜鳥自救會
    2011年7月15日 6:49
  • 你好!

    你了解一下 BackgroundWorker 类,实现代码如下:

    // 延时 5 秒弹出对话框
    using (var bg = new BackgroundWorker())
    {
      bg.DoWork += delegate { System.Threading.Thread.Sleep(5000); };
      bg.RunWorkerCompleted += delegate { MessageBox.Show("Hello!"); };
      bg.RunWorkerAsync();
    }
    


    知识改变命运,奋斗成就人生!
    2011年7月15日 7:05
    版主
  • 我想在执行打开网页后等待几秒,然后再执行后面的代码,在等待时不影响网页的打开

    webBrowser1 .Navigate("*****");

    等待

    .......

    2011年7月15日 10:12
  • dear

    请使用多线程或是BackgroundWorker 类别

     

        private void Form1_Load(object sender, EventArgs e)
        {
          ThreadPool.QueueUserWorkItem(new WaitCallback(startWeb),null);
          Thread.Sleep(5);//主线程休习
        }
        void startWeb(object state)
        {
          webBrowser1.Navigate("*****");
        }


    Thread.Sleep指静态方法,用于该线程;在Form1_Load方法里指的是主线程,由 ThreadPool.QueueUserWorkItem方法呼叫的是另外一条线程,所以在Form1_Load使用Tread.Sleep表示让主线程休习。以下有许多线程锁定方法
    http://www.dotblogs.com.tw/yc421206/category/4583.aspx

    使用多线程必须了解线程状态
    http://www.dotblogs.com.tw/yc421206/archive/2011/01/05/20599.aspx

     

     


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    • 已标记为答案 dry1 2011年7月16日 11:01
    2011年7月16日 7:58
  • 你好!

    上面的示例是能满足你的要求的

    using (var bg = new BackgroundWorker())
    {
     bg.DoWork += delegate { System.Threading.Thread.Sleep(5000); }; // 启用一个线程等待 5 秒
     bg.RunWorkerCompleted += delegate { MessageBox.Show("Hello!"); }; // 线程执行完成后会执行 RunWorkerCompleted 事伯的代码块
     bg.RunWorkerAsync();
    }


    知识改变命运,奋斗成就人生!
    2011年7月17日 23:42
    版主