簡體   English   中英

從另一個類的后台線程更新GUI控件

[英]Update GUI controls from a background thread of another class

我正在創建一個基於Windows的應用程序,它從服務器下載數據。 我正在使用在不同類上創建的后台線程來執行這些下載操作。我想繼續在富文本框上顯示下載狀態,即在主線程上。但我無法做到這一點,得到一個跨線程操作無效。 請幫我解決這個問題。

Form1.cs上的方法

public void UpdateRichText(string Text)
{
    SetRichText(Text);                     
}

public delegate void SetRichTextTextDelegate(string text);
public void SetRichText(object number)
    {            
        if (InvokeRequired)
        {                
            this.BeginInvoke(new SetRichTextTextDelegate(SetRichText),text);                
            return;
        }

        richTextBox1.Text += number.ToString() + "\n";
    }
     private void button3_Click_1(object sender, EventArgs e)
    {
        demo d = new demo();
        d.display();
    }

demo.cs上的方法

    Form1 f = new Form1();
    public void display()
    {      
        Thread t = new Thread(new ThreadStart(call));
        t.Start(); 
    }


    public void call()
    {
    //when i call this method every time if(InvokeRequired) is false.
        f.UpdateRichText("Called from Thread");
    }

嘗試將支票更改為:

if (richTextBox1.InvokeRequired) 
{
    richTextBox1.BeginInvoke(new SetRichTextTextDelegate(SetRichText),text); 

嘗試使用以下內容

           if (richTextBox1.InvokeRequired)
            {
                richTextBox1.Invoke(new Action(delegate {  richTextBox1.Text += number.ToString() + "\n";  richTextBox1.ScrollToCaret(); }));

            }
            else
            {
                richTextBox1.Text += number.ToString() + "\n";
                richTextBox1.ScrollToCaret();
            }

richTextBox1.Text + = number.ToString()+“\\ n”; 可以改變如下,

rtbEvents.AppendText(Environment.NewLine + number.ToString());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM