WPF仅在调试时正确显示
我是WPF的新手,正在编写一个程序,向通过串行端口进行通信的无线设备发送/接收消息。我被困在一个特定的部分,其中GUI没有按预期显示。。。但当我输入断点并进行调试时,数据会正确显示。如何调试在调试模式下正常工作的东西 其要点是,我向串行端口设备发送两条单独的消息,以填充GUI的两个不同部分WPF仅在调试时正确显示,wpf,debugging,Wpf,Debugging,我是WPF的新手,正在编写一个程序,向通过串行端口进行通信的无线设备发送/接收消息。我被困在一个特定的部分,其中GUI没有按预期显示。。。但当我输入断点并进行调试时,数据会正确显示。如何调试在调试模式下正常工作的东西 其要点是,我向串行端口设备发送两条单独的消息,以填充GUI的两个不同部分 private void getDeviceIntoButton_Click(object sender, RoutedEventArgs e) { IDList.Dispatcher.Invoke
private void getDeviceIntoButton_Click(object sender, RoutedEventArgs e)
{
IDList.Dispatcher.Invoke(new Action(() =>
{
//send message to serial port device to get ID#
}));
Thread.Sleep(100);
SettingsList.Dispatcher.Invoke(new Action(() =>
{
//send message to serial port device to get settings
}));
}
然后,我的事件处理程序将接收每个单独的消息并显示到GUI:
private void DisplayID(string data)
{
IDList.Dispatcher.Invoke(new Action(() =>
{
//add received ID to ID list
}));
}
private void DisplaySettings(string data)
{
SettingsList.Dispatcher.Invoke(new Action(() =>
{
//add received setting to settings list
}));
}
如果我只发送这两条消息中的一条,它会以某种方式工作,但是如果我同时发送这两条消息,GUI的任何部分都不会更新。同样,令人困惑的是,当我调试时,它们都正确显示。有什么想法吗?你知道Thread.Sleep100是做什么的吗?你几乎看不到它的变化,因为这仅仅是100毫秒。此外,如果你正在睡眠UI线程,没有一个控件会更新,因为它们都在睡眠中。一旦它完成睡眠,它已经得到了更新的新信息。我们需要更多的信息。它以什么方式不能正确显示?你能提供截图吗?它在没有调试器的调试版本中工作吗?如果它在调试器中没有任何断点呢?这似乎是一个计时问题,而不是WPF特有的问题。我只会在您收到第一条消息的响应后发送第二条消息。您也不需要使用Dispatcher,除非您是从另一个线程与UI线程通信。@RyanEmerle,我的解决方法是在收到第一个响应后发送第二条消息,但我不确定这是否是一种好的做法。感谢那些回应的人;我会试着不睡觉,多睡一会儿,如果我仍然不成功,我会发送截图。再次感谢!