0
private void button1_Click(object sender, EventArgs e)
{
    t = new Thread(new ParameterizedThreadStart(startRequest));
    t.Start(textBox1);
}

void startRequest(object textBox1)
{
    textBox1.Text = "hello";
}

ここで、textBox1にプロパティTextがないというエラーが表示されます。メインスレッドではすべて問題ありませんが、新しいスレッドではエラーが発生します。これを修正するにはどうすればよいですか?

4

3 に答える 3

4

Textプロパティを使用する前に、objectをTypeにキャストする必要があります。TextBox

void startRequest(object textBox1)
{
    MethodInvoker mi = delegate
    {
        TextBox tempTextBox = textBox1 as TextBox;
        if (tempTextBox != null)
            tempTextBox.Text = "hello";
    };

    if (this.InvokeRequired)
        this.Invoke(mi);
}

キャストが失敗した場合は、nullをチェックすることもお勧めします。

于 2012-12-06T09:32:40.730 に答える
1

オブジェクトにはプロパティがありません。反対する必要がありtype castます。TextBox現在のスレッドにはないため、テキストボックスにアクセスできませんGUI threadMethodInvoker次のように、GUIスレッドでコードを呼び出すために使用できます。

void startRequest(object textBox1)
{
    MethodInvoker mi = delegate {         
        ((TextBox) textBox1).Text = "hello";
    }
    if(InvokeRequired)
       this.Invoke(mi);
}
于 2012-12-06T09:33:31.660 に答える
1

UIスレッド以外のスレッドからUIコンポーネントにアクセスすることはできません。ここで例外が発生します

tempTextBox.Text = "hello";

別のスレッドからそれを行おうとした場合。

于 2012-12-06T09:36:32.550 に答える