0
   private void button1_Click(object sender, RoutedEventArgs e)
    {
        new Thread(delegate() { doTest(); }).Start();
    }

以下のように、mainwindow に doTest() が含まれていると、テキスト ボックスがスレッドから更新され、テキスト ボックスの値が変更されていることがわかります (したがって、スレッドからの値の更新が機能しています。

   public void doTest()
        {
            int count = 20;
            while (count < 30)
            {
                 Dispatcher.Invoke(new Action(() => txtBoxLog.Text = count.ToString()), null);
                count++;
                Thread.Sleep(500);
            }
        }

しかし、上記のコードを削除して別のクラスを作成し、メインウィンドウクラスの外に配置すると、スレッドからのテキストボックスの更新が失敗し、エラーは発生しませんが、単にその値を変更しないため、ディスパッチャーを使用してスレッドから更新しません更新中。

doTest() クラスから mainwindow にアクセスするには、内部静的 main winodwo calss tw を作成しました

internal static MainWindow tw;

そして今、私のdoTest()メソッドはclsTest.csファイルに次のコードを持っています

internal class clsTest
{
    public clsTest() { }

    public void doTest()
    {
        int count = 20;
        while (count < 30)
        {
            MainWindow.tw.Dispatcher.Invoke(
             new Action(() => MainWindow.tw.txtLog.Text = count.ToString()), DispatcherPriority.Background, null);

            count++;
            Thread.Sleep(500);
        }
    }
}

ここでどこが間違っているのかを特定するのを手伝ってください..

4

3 に答える 3

0

の代わりにtwasを初期化する必要はありませんか?tw = thistw = new MainWindow()

于 2012-09-10T20:15:01.167 に答える
0

どこが間違っているかを特定するのを手伝ってください

をバインドするだけでなく、ディスパッチャーを使用する部分ですText

于 2012-09-10T01:36:08.027 に答える