1

コードの実行中にアプリケーションが画面情報を更新するようにしたい。試してみましthis.LayoutRoot.UpdateLayout();たが、うまくいかず、理由がわかりません。誰か助けてもらえますか?アプリケーションは、クリックされたボタンからボタンの適切性を受け取り、それをModelクラスのいくつかのことに使用して、ユーザーにメッセージを表示したいと思います。その後、もっと多くのことを実行し続けたい(AI)...:S

public void showMsgFromModel(string player, string msg)
    {
        if(player!="")
            txNomeMsg.Text = player + ":";
        else
            txNomeMsg.Text = player;

        txMsg.Text = msg;
        this.LayoutRoot.UpdateLayout();
        System.Threading.Thread.Sleep(1500);
    }
4

1 に答える 1

0

UIスレッドから何らかの処理を行おうとしているため、インターフェイスを更新できません。

バックグラウンドワーカーを使用して実行時間の長いタスクを実行し、UIを更新する必要がある場合はディスパッチャーを使用します。

var worker = new BackgroundWorker();

worker.DoWork += (s, e) =>
{
    Thread.Sleep(1500); // Some processing

    Dispatcher.BeginInvoke(() => txMsg.Text = "Hello"); // Update the UI

    Thread.Sleep(1500); // More processing
};

worker.RunWorkerAsync();
于 2012-12-01T15:19:54.840 に答える