我有一个方法可以在执行时更新richtextbox。我必须多次调用此方法,而不会阻止GUI。一旦呼叫结束并且填充了richtextbox,我必须阻止流向用户显示一些信息(下一次调用该方法不应该启动)。我用MessageBox.Show()完成了这个。
这里出现了另一个问题,我必须能够在任何给定时间中止该程序,但模态消息框不允许我这样做。也许你会告诉我得到另一个表格并模拟消息框,但是,如果模态框将被替换,我仍然需要阻止流程。
答案 0 :(得分:1)
是的,这是一个多线程问题。有很多方法可以实现这一目标。以下是多线程的解释。 What is multi-threading?
此外,这是我最喜欢的多线程教程:albahari.com
线程有自己的堆栈并独立运行。以下是如何生成线程的一个示例:
Thread _thread = new Thread(() => { MessageBox.Show("Hello world!", "Spawned in a different thread"); });
_thread.Start();
要从另一个线程调用richtextbox,一种方法是在表单内部创建一个方法,通过调用文本框将文本附加到文本框中。以下是如何执行此操作的示例:
public void AddText(string Text)
{
if (this.textBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(AddText); // Delegate
this.Invoke(d, new object[] { text });
}
else { this.textBox1.AppendText(text); }
}
这是对你要做的事情的msdn参考: