2016-01-23 85 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

相关问题