C# 循环在Windows XP中不重复

C# 循环在Windows XP中不重复,c#,C#,该循环应继续,直到满足以下条件: while(listBox1.Items.Count == 0) { if (m_AsyncWorker.CancellationPending) { Console.WriteLine("Cancellation pending ..."); e.Cancel = true; return; } string[] workerResult = new string[10]; Stopwa

该循环应继续,直到满足以下条件:

while(listBox1.Items.Count == 0)
{
 if (m_AsyncWorker.CancellationPending)
    {
       Console.WriteLine("Cancellation pending ...");
       e.Cancel = true;
       return;
    }


  string[] workerResult = new string[10];

  Stopwatch stopwatch = new Stopwatch();
  stopwatch.Start();

    foreach(var line in lines)
        {
         //Process - when a value returns true, it will be added to listbox1 and
         //so should break out of the while loop. Until the value returns true, 
         //the while loop will continue and so the foreach loop will repeat. 
        }
}
指正在程序中读取的文本文档

该过程正在backgroundworker线程上完成。我还添加了一个秒表,以计算foreach循环完成所需的时间


这在我的Windows 7 PC上运行得非常好,但是在我的Windows XP VM中,它将完成整个循环一次(即检查文本文档中的每一行),然后再次开始新的while循环(因为列表框仍然为空),但是它不会开始新的foreach循环,似乎只是在“Stopwatch.Start();”之后停止。Windows XP虚拟机正在使用.NET 4框架

您能告诉我们
行的确切内容吗?另外,所有这些代码都在BackgroundWorker的工作中吗?即使是
while(listBox1.Items.Count==0)
?你是怎么做到的?它应该抛出交叉线程异常

另外,在这个内部foreach中,您说您正在向listbox1添加行—它也应该抛出交叉线程异常

在WinForms和WPF中,不可能从与主UI线程不同的线程中接触UI元素,因此,如果您在BGW的作业中运行该代码,您应该会遇到各种异常。(顺便说一句,我说的是BGW的作业,而不是事件通知,如进度或完成!这些通知会同步回UI线程)

考虑到交叉线程异常,也许这就是停止循环的原因?您是否已检查“输出面板”中的任何首次更改异常日志?如果他们被扔了,你总会看到他们在那里被报告


旁注:在Windows7+上,异常策略有所更改,一些未处理的异常被UI框架禁用。嗯,至少在WPF里。我不记得WinForms里是怎么回事了。然而,即使这是差异的根源,我也不明白如何让它在W7中运行。它也应该抛出这些异常,并且应该立即打破循环。您是否已禁用交叉线程检查?如果是这样,奇怪的事情可能会发生。你不该这么做!它们应该被打开,如果您需要从后台线程接触UI元素,您应该使用调用“临时”将该操作委托回UI线程。

我已经编辑了您的标题。请看,“问题是否应该在标题中包含“标签?”(),其中的共识是“不,它们不应该”。“似乎在
秒表.Start()之后才停止。”
“你是如何确定的?”@BradleyDotNET你在偷“东西”。-)@要是我能想出怎么做内联链接就好了!哦,好吧,我想这会让它更像是我自己的。@BradleyDotNET标题用方括号括起来,链接用括号括起来。很抱歉,所有响应都会加载到一个数组中,并报告给ProgressChangedEventHandler,从那里更新UI。i、 e'bw.ReportProgress(0,workerResult);',其中,“workerResult”定义为“string[]workerResult=新字符串[10];”-顺便说一下,非常感谢您的快速响应。