0

重複の可能性:別の
スレッドからのUIの更新別のスレッド
がオブジェクトを所有しているため、呼び出し元のスレッドはこのオブジェクトにアクセスできません

全てにおいて良い日。チャットアプリケーションに問題があります。チャットを常に更新する必要がありますが、エラーが表示されます。この問題を解決する方法がわかりません。誰かが私を助けてくれることを願っています。これが私のコードです:

void timerChatRefresh_Tick(object sender, EventArgs e)
    {

        thread = new Thread(new ThreadStart(ChatRefresh));
        thread.Start();
    }

    private void ChatRefresh()
    {
        conn = new MySqlConnection("Server=...; Database=...; Uid=...; Password=...;");
        ds.Clear();
        da.SelectCommand = conn.CreateCommand();
        da.SelectCommand.CommandText = "select * from chatmessagetbl";
        da.SelectCommand.CommandType = CommandType.Text;
        da.Fill(ds, "chatmessagetbl");
        foreach (DataRow item in ds.Tables["chatmessagetbl"].Rows)
        {
            textBlockChatArea.Text += item["username"].ToString() + ": " + item["message"].ToString() + "\n";
        }
    }
4

1 に答える 1

1

textBlockChatArea.Invoke("Text プロパティを更新するメソッドにデリゲート") を試してください

1.デリゲートを宣言する   
    パブリック デリゲート void UpdateChatAreaCallback(string text);
2. テキスト ボックスを更新するメソッドを作成します。
    public void UpdateChatArea(string text){textBlockChatArea.Text += text;}
3. メソッドを呼び出します。
    textBlockChatArea.Invoke(new UpdateChatAreaCallback(UpdateChatArea, "新しいテキスト"));
于 2012-06-11T03:18:37.943 に答える