2015-12-04 143 views
-1

我在使用線程的WinFrm應用程序上出現錯誤。此代碼運行良好:Windows窗體線程錯誤

private void button1_Click(object sender, EventArgs e) 
    { 
     bool keepGoing = true; 
     Task.Factory.StartNew(()=> 
     { 
      while (keepGoing) 
      { 
       try 
       { 
        Thread.Sleep(500); 

       } 
       catch (Exception ex) 
       { 
        throw; 
       } 
      } 
     }); 
    } 

請注意事件處理程序中的布爾keepGoing變量。如果我把布爾keepGoing事件處理程序之外,並在循環內放置一個斷點Visual Studio將停止工作。

bool keepGoing = true; 
    private void button1_Click(object sender, EventArgs e) 
    { 

     Task.Factory.StartNew(()=> 
     { 
      while (keepGoing) 
      { 
       try 
       { 
        Thread.Sleep(500); 

       } 
       catch (Exception ex) 
       { 
        throw; 
       } 
      } 
     }); 
    } 
} 

這是一個用10場和完整代碼VS2015和.net 4.52.Both實例運行,只有當你設置在while循環中的第二個例子是VS停止工作斷點。這是爲什麼發生?我試圖實現兩種代碼版本的運行方式完全相同 - 我的機器上的第二個版本存在問題,但我不知道它會是什麼。

+0

你是什麼意思掛起?我已經嘗試了兩個例子,並在兩種情況下循環「繼續前進」。 – gabba

+1

相同......不能重現任何掛起。 –

+0

相同。我的代碼中有相同的結構。 – KDecker

回答

0

嘗試測試是這樣的:

bool keepGoing = true; 
    private void button1_Click(object sender, EventArgs e) 
    { 

     Task.Factory.StartNew(Work); 
    } 

    private void Work() 
    { 
     while (keepGoing) 
     { 
      try 
      { 
       Thread.Sleep(500); 

      } 
      catch (Exception ex) 
      { 
       throw; 
      } 
     } 
    }