-2
我嘗試使用從串行端口接收的數據更新MainPage UI。一旦收到數據,就會引發一個事件,所以我使用MVVMLight向MainPage發送一條消息,希望能夠更新UI。這裏有什麼可能是錯的?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中使用。 –