从另一个类向richtextBox添加文本

时间:2014-03-16 11:33:24

标签: c# thread-safety instance invoke

已经多次询问过可比较的问题,但我没有得到我的问题的线索:我有一个“父”Form = Form1,另一个表格“F5”的实例如下:

namespace MyNameSpace
{
public partial class Form1 : Form
{
    F5_Interactive F5 = new F5_Interactive();

    public Form1()
    {
        InitializeComponent();
    }
....

我通过菜单打开F5 - 点击这样:

    public bool IsFormOpen(Type formType)
    {
        foreach (Form form in Application.OpenForms)
            if (form.GetType().Name == "F5_Interactive")
                return true;
        return false;
    }
    private void Interactive_Click(object sender, EventArgs e)
    {
        F5_Interactive F5 = new F5_Interactive();

        if(!IsFormOpen(typeof (F5_Interactive)))
            F5.Show();
    }

F5_Interactive意味着一个RichTextBox,我要向其中添加来自不同类的消息。其中一个类是Form1,其中包含一个按钮:

    private void button1_Click(object sender, EventArgs e)
    {
        F5_Interactive F5 = new F5_Interactive();
        F5.AppendTextBox("bla");

    }

回到我所拥有的F5_Interactive:

    public delegate void AppendTextBoxCallback(string text);
    public void AppendTextBox(string text)
    {
        if (richTextBox1_IB.InvokeRequired)
        {
            MessageBox.Show("RI");

            AppendTextBoxCallback CallbackDelegate = new AppendTextBoxCallback(AppendTextBox);
            richTextBox1_IB.Invoke(CallbackDelegate, new object[] { richTextBox1_IB });
            // Alternative:
            //richTextBox1_IB.Invoke(new Action(() => { richTextBox1_IB.AppendText(text + "\r\n"); }));
        }
        else
        {
            MessageBox.Show(" No RI");
            richTextBox1_IB.AppendText(text + "\r\n");
        }
    }

我没有达到“调用询问”的状态。这似乎是因为我没有回到F5_Interactive的初始实例。如果我从同一个类调用方法AppendTextBox但是它可以使用不同的Thread。有什么建议?谢谢!

0 个答案:

没有答案