今天在做一个WPF项目时,运用到了MVVM+async/await开发。发现了WPF开发中的一个坑,在此记录。
先说结论:Visual Studio中的设计器(就是可以实时显示xaml的那个窗口)会对xaml代码进行生成并在Visual Studio打开设计器窗口后一直缓存,如果在xaml中设置Window.DataContext
为某个ViewModel的话,这个ViewModel的构造方法将会在xaml生成之后被调用一次。如果ViewModel的构造方法中有多线程或者调用了异步方法,那么只要在Visual Studio中生成这个xaml界面后,多线程或者异步方法就会一直存在
在ViewModel的构造方法中写入了一个异步方法用于监听端口的UDP消息,如下:
/// <summary>
/// 每隔3s重新向连接控制端口广播一次口令
/// 当连接确认后,停止该方法
/// </summary>
private async void SearchingConnectionCtrl()
{
conCtrlCTS = new CancellationTokenSource();
conCtrlCT =</