読者です 読者をやめる 読者になる 読者になる

PG.Lib

主にUWP、C#に関することやガジェット系

データバインディングしたGirdView で非同期にデータ追加するとエラーになる その2

過去記事でデータバインドした GridView にデータ操作するとエラーになる対策を書いたけど、またハマったので追記w

 

過去記事では

void _listener_ConnectionReceived(Windows.Networking.Sockets.StreamSocketListener sender, Windows.Networking.Sockets.StreamSocketListenerConnectionReceivedEventArgs args)
{
    // データ受信的な処理

    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, delegate
    {
        hoge.AddHoge(受信データ);
    });
}

な感じで、Dispatcher.RunAsync で囲っとけばオッケー!的に書いたけど、割とダメなケースが出てきた。

 

ダメなケース

そもそも Dispatcher.RunAsync って Windows.UI.Core なので、ページがある前提だったりする。

つまり、クラス内でイベント発生したりして、バインドしたデータ操作からのエラー!! というケースがある。

モデル、モデルビューをきっちりクラス化して、ビュー(ページ)にはバインドするだけ!頑張れモデル!!な作りにしたらこうなったw

 

 

 

対応

もうちょっと根底な部分から呼ぶようにした。

await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(
    CoreDispatcherPriority.Normal,
    new DispatchedHandler(() =>
    {
       // ここにUI処理
    }));

 

ここでいうUI処理は、「NotifyPropertyChanged」な通知も含む。というか通知の瞬間がやばいので、そっちを対応した方がいいのか??

ともかく、これで解決!!

参考サイト:クイック スタート: スレッド プールへの作業項目の送信 (XAML)