6

スレッドと UI コントロールに興味があります。

テスト コードによると、コンパイルした .exe ファイルを実行すると、スレッドは問題なくプロセスバーにアクセスします。しかし、コードをデバッグすると、InvalidOperationException が発生します。(プールされたスレッドまたは通常のスレッドに関係なく。)

したがって、スレッドが UI コントロールへのアクセスを許可されていないことはわかっていますが、.exe ファイルを実行しても問題ない理由はわかっています。意図したデザインですか?

PS.backgroundworker を使用して物事をエレガントにできることはわかっています。

private void button1_Click(object sender, EventArgs e)
{
    Task.Factory.StartNew(dothing);//use the pooled thread
    //Thread t = new Thread(new ThreadStart(this.ThreadProcSafe));
    //t.Start();
}

private void dothing()
{
    for (int i = 1; i <= 100; i++)
    {
        progressBar2.Value = i;
        Thread.Sleep(100);
    }
}
4

1 に答える 1

-5

私の記憶では、他のスレッドでは UI Element にアクセスできず、メイン スレッドでのみアクセスできます。これは、マルチスレッドの問題 (同じメモリ内でのマルチアクセス、非同期の問題など) が原因です。やりたいことをやりたいなら。C# では「デリゲート関数」を使用できます。

于 2012-12-14T03:15:00.913 に答える