如何阻止流程,但保持GUI响应

时间:2012-03-25 00:20:18

标签: c# winforms

我有一个方法可以在执行时更新richtextbox。我必须多次调用此方法,而不会阻止GUI。一旦呼叫结束并且填充了richtextbox,我必须阻止流向用户显示一些信息(下一次调用该方法不应该启动)。我用MessageBox.Show()完成了这个。

这里出现了另一个问题,我必须能够在任何给定时间中止该程序,但模态消息框不允许我这样做。也许你会告诉我得到另一个表格并模拟消息框,但是,如果模态框将被替换,我仍然需要阻止流程。

1 个答案:

答案 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参考:

http://msdn.microsoft.com/en-us/library/ms171728.aspx