0

Async DataGrid 読み込み機能があります。したがって、WaitFor() を呼び出す必要があります。そのコードは次のとおりです。

WaitFor(TimeSpan.Zero, DispatcherPriority.SystemIdle);

そして、次の2つの方法があります。誰かがこのメソッドが正確に何をしているのか説明できますか?

public static void WaitFor(TimeSpan time, DispatcherPriority priority)
{
    DispatcherTimer timer = new DispatcherTimer(priority);
    timer.Tick += new EventHandler(OnDispatched);
    timer.Interval = time;
    DispatcherFrame dispatcherFrame = new DispatcherFrame(false);
    timer.Tag = dispatcherFrame;
    timer.Start();
    Dispatcher.PushFrame(dispatcherFrame);
}

public static void OnDispatched(object sender, EventArgs args)
{
    DispatcherTimer timer = (DispatcherTimer)sender;
    timer.Tick -= new EventHandler(OnDispatched);
    timer.Stop();
    DispatcherFrame frame = (DispatcherFrame)timer.Tag;
    frame.Continue = false;
}
4

1 に答える 1

1

WaitFor() は必要ありません。とにかく何かを待つのはなぜですか?UI スレッドのフリーズを解除するだけで、データがロードされると、DataGrid に表示されます。

あなたが投稿したメソッドは.... WaitFor メカニズムを実行しています。メソッド名はそれをすべて説明しています:)

詳細は次のとおりです。

DispatcherTimer は、tick メソッドが呼び出されると UI スレッド上で直接実行される、基本的な C# から既に知っているかもしれない単純なダム タイマーです。したがって、UI スレッド上にいるかどうかを気にする必要はありません。あなたはいつもです:)

DispatcherTimer には、優先度が高く設定されている場合、間隔の直後にティック呼び出しメソッドが呼び出される優先度手段があります。proprity が Background に設定されている場合、UI スレッドがビジーでないときに tick メソッドが呼び出されます。

DispatcherFrame は、現在のスコープです。すべてのディスプラッチャー操作には、ある種のスコープがあります。各スコープは保留中の作業項目を処理します

Dispatcher.PushFrame は、人々が WinForms をよく使用していた頃の DoEvent() と同じです。DoEvent でシンプルに保つために、UI スレッドに何かを強制しています。

要約すると、UI スレッドで処理が完了するのを待ちます。

これがさらに役立つことを願っています。

于 2014-02-04T07:58:24.113 に答える