2012-03-25 29 views
1

我有一个方法,它在执行时更新一个richtextbox。我必须调用这个方法几次,而不会阻塞GUI。一旦通话结束并且richtextbox被填充,我必须阻止流向用户显示一些信息(接下来的方法调用不应该启动)。我用MessageBox.Show()完成了这个。如何阻止流程,但保持图形用户界面的响应

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

+1

请说明你的意思。当你说“阻止流量”时,你是什么意思? – 2012-03-25 00:27:49

+0

我必须调用该方法10次。让我们说,第一次电话后,第二个不应该开始,直到我这样说。 MessageBox正是这样做的,但是,这个MessageBox也不让我点击中止。 – 2012-03-25 00:32:30

+0

这是一个多线程问题吗? – Spencer 2012-03-25 00:53:59

回答

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

+0

请不要发布版本特定的链接到MSDN文章,除非答案是版本特定的。 – 2012-03-25 08:45:34

相关问题