-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中使用。 –