【发布时间】:2011-09-25 03:37:24
【问题描述】:
我正在尝试为此循环制作一个停止按钮,但它无限期运行,当我单击按钮 2 时没有任何反应
bool dowhile = false;
private void button1_Click(object sender, EventArgs e)
{
do
{
for (int i = listbox1.Items.Count - 1; i >= 0; i--)
{
string textstring = listbox1.Items[i].ToString();
richTextBox1.AppendText("" + textstring + ": Done\n");
Thread.Sleep(1000);
}
} while (!dowhile);
}
private void button2_Click(object sender, EventArgs e)
{
this.dowhile = true;
}
我哪里出错了?
对不起,“lvlchanger”错字,代码现在没问题,没有任何遗漏
我也在寻找一个不那么长的解决方法:))
【问题讨论】:
-
你如何改变'lvlchanger'?
-
找到这个
lvlchanger对象的所有cmets/answers 到底在哪里?也许我会失明,但我在代码中看不到它,我的浏览器搜索也没有。据我所知,该问题尚未被编辑以修改代码......有人愿意填写我吗? -
感谢您的澄清。为了回应您对“不那么长的修复”的要求,不幸的是没有这样的事情。正如我的回答所解释的,一个线程一次只能做一件事。由于许多复杂的原因,
DoEvents的 hacky 修复是一个非常糟糕的主意。我不建议任何人使用它,除非他们真正了解多线程所涉及的问题。如果他们这样做了,他们可能会改用正确的方法。按照 MSDN 页面上显示的示例,用BackgroundWorker替换整个位绝对是最简单的答案,也是最好的答案。 -
正如我所说..
DoEvents在这种情况下不起作用 -
BackgroundWorker将使我的 4page 代码成为一部小说
标签: c# loops for-loop while-loop do-while