2016-01-23 84 views
-3

我製作了一個程序,用於生成和排序數據,但當我嘗試生成大約1000個數字時,程序會凍結並且不會響應。它也從文件加載數據,但任何大文件都會凍結程序。有沒有辦法解決?當對1000多個數字進行排序時,應用程序凍結

public void generateData(int number) 
    { 
     //Clear text boxes and initialize random 
     Unsorted_Box.Clear(); 
     Sorted_Box.Clear(); 
     Random random = new Random(); 
     dataArray = new int[number]; 

     for (int i = 0; i < number; i++) 
     { 
      //Generate random numbers using max and min values, ammount and store in unsorted box 
      dataArray[i] = random.Next((int)Min_UpDown.Value, (int)Max_UpDown.Value); 
      Unsorted_Box.Text += dataArray[i] + ", "; 
     } 
    } 
+0

如果代碼在小號碼上正常工作,可能會出現問題,請嘗試使用調試器檢查代碼,並在發現錯誤時回覆。 – McBooley

+0

該應用程序進入中斷模式,並說這個「附加信息:CLR已經無法從COM上下文0x800ba8轉換到COM上下文0x800c60 60秒,擁有目標上下文/公寓的線程很可能是在執行非抽取等待或處理很長時間的運行操作而不抽取Windows消息... – user5830998

+0

這種情況通常會對性能產生負面影響,甚至可能導致應用程序變得無法響應或內存使用量不斷累積,爲避免此問題,所有單線程公寓(STA)線程應該使用抽取等待原語(如CoWaitForMultipleHandles),並在長時間運行操作期間定期抽取消息。「 – user5830998

回答

0

嘗試取消選中ContextSwitchDeadlock調試 - >異常 - >管理調試助理

+0

這樣做的工作,但它仍然工作,一旦我導出該程序? – user5830998

+1

它很可能是你阻止了超過60秒的UI線程,這不是一個好主意。禁用該調試助手將隱藏該問題。如果是花費時間的文件中的數據負載,則考慮將其放在單獨的線程上。 – DeveloperUK

+0

我還不熟悉c#(<1周),所以我不知道該怎麼做 – user5830998

0

如果程序凍結,因爲它花費很長的時間來處理,那麼你可以考慮做一個後臺線程處理。這將允許程序的其餘部分保持響應。

如果程序因死鎖而凍結,那麼您可以使用visual studio中的工具來確定發生的位置。如果它是可重現的,那麼在調試器中暫停並查看問題出在哪裏。

如果它不是這兩個,你可以分享你使用的代碼嗎?

+0

它給了我一個選項,可以在代碼凍結後繼續執行代碼,如果我選擇該選項,它將繼續並按其應有的方式工作。 – user5830998

+0

你可以在閱讀文件的地方分享代碼嗎? – DeveloperUK

+0

我分享了上面生成數據的部分 – user5830998

相關問題