-2
シリアルポートから受信したデータでMainPage UIを更新しようとしました。データが受信されると、イベントが発生するので、MVVMLightを使用してUIを更新するためにMainPageにメッセージを送信します。ここで何が間違っているのでしょうか?MessageDialog ShowAsync致命的な失敗
メインコンストラクタから関数を呼び出そうとした場合、またはシリアルイベントが発生した後に単純なTextBlockを更新する場合でも、次のサンプルは正常に機能します。
private void OnMsgRecieved(PortMsg obj)
{
ShowDialog(obj.StringID);
}
private async void ShowDialog(string msg)
{
var dlg = new MessageDialog(msg);
try
{
await Dispatcher.RunAsync(CoreDispatcherPriority.High, async() =>
{
await dlg.ShowAsync();
});
}
catch (Exception exc)
{
// Catastrophic Failure
}
}
あなたの最初の仮定は正しいです!しかし、これは絶対的なケースではない、つまり、ディスパッチャの内部で使用されている間にディスパッチャの外で宣言されたすべての変数には適用されません。どんな解釈? – usefulBee
@usefulBee UI要素の場合です。ディスパッチャ内に作成する必要があります。もちろん、UI以外のオブジェクトや文字列などの変数は、どこにでも作成してDispatcherで使用することができます。 –