2013-12-23 76 views
1

我遇到問題。這部分代碼在〜1min後返回System.OutOfMemoryException錯誤。但我無法找到導致此錯誤的原因。如果有人告訴我這個問題的原因以及如何解決,我會很高興。我的線程的線程中的System.OutOfMemoryException

部分:

public void Run(object client) 
    { 
     TextBox tbServerResult = (client as Client).Controls.Find("tbServerResult", true).SingleOrDefault() as TextBox; 
     Client tt = new Client(); 
     for (int i = 0; i < 1; i--) 
     { 
      Thread.Sleep(10000); 

      string result = tt.SendGet("xyz" + tt.getToken() + ""); 
      tbServerResult.AppendText(result); 
     } 
    } 

SendGet方法:

public string SendGet(string url) 
    { 

     string webpageContent = ""; 
     try 
     { 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 

      using (HttpWebResponse webResponse = (HttpWebResponse)request.GetResponse()) 
      { 
       using (StreamReader reader = new StreamReader(webResponse.GetResponseStream())) 
       { 
        webpageContent = reader.ReadToEnd(); 
       } 
       //tbServerResult.AppendText("\r\n" + "Server code:" + webResponse.StatusCode + " Server status description:" + webResponse.StatusDescription); 
       webpageContent = "Server code:" + webResponse.StatusCode + " Server status description:" + webResponse.StatusDescription; 
      } 


     } 
     catch (Exception ex) 
     { 
      webpageContent = ex.Message; 
     } 

     return webpageContent; 
    } 
+0

你能指出哪一行會引發異常嗎?你也可以顯示你正在請求的URL – Nickon

+0

除了'reader.ReadToEnd()'我沒有看到任何可能的候選人OutOfMemoryException,但即使如此,這將意味着一些非常快速的下載,如果它在1分鐘... – Thorarin

+1

看起來像非GUI線程中的GUI操作一樣可疑。 –

回答

5

您有for (int i = 0; i < 1; i--)

這是無限循環線。

+2

雖然你是對的,但我會盡管'Thread.Sleep'意味着它不應該運行足夠一分鐘內得到一個內存不足的異常...... – Chris

+0

代碼中有一個「無限」循環,但如果約1分鐘後出現錯誤,這不成問題。每10秒最多隻執行一次迭代。 – Thorarin