2014-08-30 94 views
0
public void serialcek() 
    { 

      while (!exitThread) 
      { 
       foreach (ManagementObject currentObject in theSearcher.Get()) 
       { 

        try 
        { 
         textBox1.Text = currentObject["Size"].ToString() + " " + currentObject["PNPDeviceID"].ToString(); 
         currentObject.Dispose(); 

        } 
        catch (Exception) 
        { 
         // MessageBox.Show("Bişiler oldu bende anlamadım"); 
         currentObject.Dispose(); 
         //exitThread = false; 
        } 
       } 

      } 
      Thread.Sleep(100); 
      serialcek(); 
     } 

我使用线程。但是几分钟后它出现了一个错误。点击按钮是exitThread成真。比5分钟后给一个StackOverflowException是未处理的HResult = -2147023895错误。StackOverflowException未处理HResult = -2147023895

感谢您的帮助。

+2

因为您呼叫serialchek()递归没有退出条件。 – OldProgrammer 2014-08-30 14:26:34

回答

2

你的调用serialcek()递归没有停止,并导致堆栈溢出。

P.s.使用finallytry\catch防止重复代码:

public void serialcek() 
{ 

     while (!exitThread) 
     { 
      foreach (ManagementObject currentObject in theSearcher.Get()) 
      { 
       try 
       { 
        textBox1.Text = currentObject["Size"].ToString() + " " + currentObject["PNPDeviceID"].ToString(); 
       } 
       catch (Exception) 
       { 
        // MessageBox.Show("Bişiler oldu bende anlamadım"); 
        //exitThread = false; 
       } 
       finally 
       { 
        currentObject.Dispose(); 
       } 
      } 
     } 
     Thread.Sleep(100); 

     if(<condition>) // add your condition here 
     { 
      serialcek(); 
     } 
    }