0

ウィンドウ フォーム コントロールを更新するためのスレッド セーフ呼び出しに関する MSDN の記事を読みました。例を以下に示します。

    private void setTextSafeBtn_Click(
        object sender, 
        EventArgs e)
    {
        this.demoThread = 
            new Thread(new ThreadStart(this.ThreadProcSafe));

        this.demoThread.Start();
    }


    private void ThreadProcSafe()
    {
        this.SetText("This text was set safely.");
    }



    private void SetText(string text)
    {

        if (this.textBox1.InvokeRequired)
        {   
            SetTextCallback d = new SetTextCallback(SetText);
            this.Invoke(d, new object[] { text });
        }
        else
        {
            this.textBox1.Text = text;
        }
    }

スレッドがウィンドウフォームコンストラクター内にある場合、これを試してみるとうまくいきます。ただし、たとえば、スレッドが Windows フォームとは異なるコンストラクターにある場合、スレッド化されたコンストラクターからどのようにアクセスしますか。私は次のようなことをしようとしました

          Form1 form1 = new Form1();

しかし、私はそれを試してみましたが、コントロールを更新しませんでした。新しいフォームを作成すると、意図したものを更新するのではなく、新しいフォームのコントロールを更新しようとしていることがわかりました。とにかく私の理解では正しいですか、これに対する解決策はありますか?

用語が間違っている場合は申し訳ありません。これをすべて理解しようとしています。

4

0 に答える 0