1

スレッド内からForm1のテキストボックスのテキストを「hellothere」に変更しようとしています。しかし、実行すると、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが表示されます。チェックすると、txtboxCheckedFielsの値がNullであることがわかります。

そのtxtboxのオブジェクトを作成するにはどうすればよいですか?(私は複数のスレッドを実行していて、そのすべてがそのテキストを変更できるはずです。

私が試したコード:

txtboxCheckedFiles.Invoke(new Action(() =>
                {
                    txtboxCheckedFiles.Text = "Hello there";
                }));

そして私が試した別の方法

var t = new Thread(
o => 
{
     txtboxCheckedFiles.BeginInvoke(
         ((Action)(() => txtboxCheckedFiles.Text = "Hello there")));
});
4

2 に答える 2

2

それは同じかもしれません..しかし、これは私がいつも使ってきたものです:

    public void LabelWrite(string value)
    {
        if (InvokeRequired)
            Invoke(new LabelWriteDelegate(LabelWrite), value);
        else
        {
            textBox1.Text = value;
        }
    }
    delegate void LabelWriteDelegate(string value);

チャームのように機能します..基本的に、else{}にも好きなように書くことができます。

于 2012-10-12T09:08:04.937 に答える
1

まず、呼び出しが必要かどうかを確認する必要があります。次に、呼び出しを行うことができます。また、ウィンドウへのハンドルがあることを確認することを検討してください。これは、ウィンドウが稼働していることを意味します(たとえば、フォームのコンストラクターにデータを読み込もうとすると失敗します)

if (this.InvokeRequired)
{
    IAsyncResult result = BeginInvoke(new MethodInvoker(delegate()
    {
        // DOSTUFF
    }));

    // wait until invocation is completed
    EndInvoke(result);
}
else if (this.IsHandleCreated)
{
    // DO STUFF
}
于 2012-10-12T08:39:00.660 に答える