0

私はWPFのスレッドについて何かを学ぼうとしていましたが、これはコードスニペットです。

    public MainWindow()
    {
        InitializeComponent();
        start = delegate()
        {
            statusText.Text = "From Other Thread";
        };
        t = new Thread(start);
        t.Start();
    }

本が言ったように、それは例外があるでしょう、そしてそうです。それは、ディスパッチスレッドに関するものだからだとわかりました。次に、以下のコードのように、ボタンクリック処理関数にコード行を挿入します:`

public partial class MainWindow : Window
{
    ThreadStart start;
    Thread t;
    public MainWindow()
    {
        InitializeComponent();
        start = delegate()
        {
            statusText.Text = "From Other Thread";
        };
        t = new Thread(start);

    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        t.Start();
    }

以前と同じように例外があることを期待していましたが、何も起こらず、テキストは変更されませんでした。とても私のためにいらいらしました。なぜこれが起こったのですか?誰かが助けを提供できることを願っています。ありがとう。

4

1 に答える 1

2

別のスレッドからUIコンポーネントを更新するには、ディスパッチャーを使用する必要があります。

public MainWindow() 
{ 
   InitializeComponent(); 
   start = delegate() 
    { 
       Dispatcher.BeginInvoke(((Action)(() => {statusText.Text = "From Other Thread";})));
    }; 
    t = new Thread(start); 

} 
于 2012-10-16T12:42:23.933 に答える