2015-03-24 5 views
-5

В моей программе у меня есть 2 темы, первый постоянно работает while (isRunning) {Thread.Sleep без замораживания пользовательского интерфейса для Framework 2.0

и для второго способа резьбы, мне это нужно, чтобы спать в течение минуты, пока его истинный. Проблема, с которой я сталкиваюсь, с моим текущим кодом заключается в том, что я получаю Not Responding для своей программы в диспетчере задач.

Как исправить это, обратите внимание, что я использую Framework 2.0.

private void initialize() { 
     MyWeb.connectToServer(); 
     commandThread = new Thread(checkForCommandThread); // The thread that I need not to freeze the program 
     commandThread.Start(); 
    } 

private void checkForCommandThread() { 
     while (isRunning) { 
      Thread.Sleep(10000); 
      // while this thread is sleeping, the program should not be frozen 
      // do the work here, after the sleep 
     } 
    } 
+0

Возможно, вы ищете что-то вроде: http://stackoverflow.com/questions/15341962/how-to-put-a-task-to-sleep-or-delay-in-c-sharp-4-0 – Habib

+5

Вам нужно * не * блокировать поток пользовательского интерфейса. – Servy

+0

Это для более высоких платформ, но подробно обсуждает вашу проблему. http://stackoverflow.com/questions/16819447/alternative-to-thread-sleep-in-windows-form-apart-from-timer –

ответ

0

Кажется, я получаю эту Not Responding на моей программе, потому что другой поток я, что постоянно работает, не было какой-либо Сон в нем, и работает так же быстро, как это возможно, что делает программу Not Responding и использовать до 13% CPU ...

а простого Thread.Sleep(10); неподвижного всех

-1

Хорошо, если у вас есть код, как этот

public static bool _isRunning = false; 

    private void button1_Click(object sender, EventArgs e) 
    { 
     _isRunning = true; 
     var thread = new Thread(DoWork) {IsBackground = true}; 
     thread.Start(); 

     while (_isRunning) 
     { 
      //HERE GOES THE MAGIC 
      Application.DoEvents(); 
     } 
    } 

    private static void DoWork() 
    { 
     System.Threading.Thread.Sleep(20000); 
     _isRunning = false; 
    } 
+0

Вот большое объяснение того, как и когда вы можете использовать эту вещь «DoEvents»: [link] (http://stackoverflow.com/questions/5181777/use-of-application -doevents). Но только дураки могут считать, что вы всегда можете «не блокировать нить». – cdmnk

Смежные вопросы