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];”-顺便说一下,非常感谢您的快速响应。