C# 异步函数仅更新一个";等待“;

C# 异步函数仅更新一个";等待“;,c#,xaml,asynchronous,async-await,C#,Xaml,Asynchronous,Async Await,请原谅我对这个问题的无知,但我没有受过异步编程的教育。然而,我相信我的代码已经接近实现我所需要的功能 基本上,下面的代码只适用于第一种情况 C61 = new BridgeViewModel("C61"); await C61.Initialize(); 声明。其他项都没有向bound.xaml返回任何数据,我也不知道为什么。每个都需要在自己的初始化函数中吗 非常感谢您的帮助 代码: 名称空间SentinelApp { /// ///MainWindow.xaml的交互逻辑 /// 公共部

请原谅我对这个问题的无知,但我没有受过异步编程的教育。然而,我相信我的代码已经接近实现我所需要的功能

基本上,下面的代码只适用于第一种情况

C61 = new BridgeViewModel("C61");
await C61.Initialize();
声明。其他项都没有向bound.xaml返回任何数据,我也不知道为什么。每个都需要在自己的初始化函数中吗

非常感谢您的帮助

代码:

名称空间SentinelApp
{
/// 
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
var vm=新的MainViewModel();
DataContext=vm;
vm.Initialize();
}
}
公共类主视图模型
{
公共只读字符串[]Bridges={“C61”、“C62”、“C63”、“C68”、“C69”、“K71”、“K72”、“K73”、“K74”、“T91”、“GN01”、“GE01”、“GA01”};
公共异步任务初始化()
{
C61=新的BridgeViewModel(“C61”);
等待C61.Initialize();
C62=新的BridgeViewModel(“C62”);
等待C62.Initialize();
C63=新的BridgeViewModel(“C63”);
等待C63.Initialize();
C68=新的BridgeViewModel(“C68”);
等待C68.Initialize();
C69=新的BridgeViewModel(“C69”);
等待C69.Initialize();
K71=新的BridgeViewModel(“K71”);
等待K71.Initialize();
K72=新的BridgeViewModel(“K72”);
等待K72.Initialize();
K73=新的BridgeViewModel(“K73”);
等待K73.Initialize();
K74=新的BridgeViewModel(“K74”);
等待K74.Initialize();
T91=新的BridgeViewModel(“T91”);
等待T91.Initialize();
GA01=新的BridgeViewModel(“GA01”);
等待GA01.Initialize();
GE01=新的BridgeViewModel(“GE01”);
等待GE01.Initialize();
GN01=新的BridgeViewModel(“GN01”);
等待GN01.Initialize();
}
公共BridgeViewModel C61{get;set;}
公共BridgeViewModel C62{get;set;}
公共BridgeViewModel C63{get;set;}
公共BridgeViewModel C68{get;set;}
公共BridgeViewModel C69{get;set;}
公共BridgeViewModel K71{get;set;}
公共BridgeViewModel K72{get;set;}
公共BridgeViewModel K73{get;set;}
公共BridgeViewModelK74{get;set;}
公共BridgeViewModelT91{get;set;}
公共BridgeViewModel GA01{get;set;}
公共BridgeViewModel GE01{get;set;}
公共BridgeViewModel GN01{get;set;}
}
公共类BridgeViewModel:ViewModel
{
专用只读客户端包装器\u客户端;
私有只读字符串桥;
专用只读计时器_Timer=new Timer();
公共桥视图模型(字符串桥)
{
_client=newclientwrapper();
_桥=桥;
}
公共异步任务初始化()
{
等待客户端连接(_桥);
wait_client.SendMessage(新会话开始(“3”、“25”).CreateBridgeMessage());
_计时器。间隔=1000;
_timer.appead+=更新;
_timer.Start();
}
私有异步无效更新(对象发送方,ElapsedEventArgs e)
{
试一试{
var response=wait_client.SendMessage(“BS~RESERVE~STATS~REQ~”+_bridge+“~0”);
var split=response.split('~');
时间戳=拆分[4]。子字符串(0,2)+:“+拆分[4]。子字符串(2,2)+:“+拆分[4]。子字符串(4,2);
自由港=分割[6];
longesthhold=TimeSpan.FromSeconds(int.Parse(split[15])).ToString(“hh:mm”);
钟声=分裂[12];
信号=分割[8];
}捕获{}
}
私有字符串\u时间戳;
公共字符串时间戳
{
获取{return\u timestamp;}
设置{u timestamp=value;RaisePropertyChanged();}
}
私人弦铃;
公共弦铃
{
获取{return\u bells;}
设置{u=value;RaisePropertyChanged();}
}
私有字符串信号;
公共字符串信号
{
获取{return\u signals;}
设置{u signals=value;RaisePropertyChanged();}
}
私有字符串自由端口;
公共字符串自由端口
{
获取{return\u freeports;}
设置{u freeports=value;RaisePropertyChanged();}
}
私人字符串(u longesthold);;
公共弦长柄
{
获取{return\u longesthold;}
设置{u longesthold=value;RaisePropertyChanged();}
}
}
}

不要在构造函数中使用异步方法,而是在事件中注册并使用它,您可以在事件中等待它:

public MainWindow()
{
    InitializeComponent();
    Loaded += InitializeOnLoaded;
}

public async void InitializeOnLoaded(object sender, RoutedEventArgs e)
{
    var vm = new MainViewModel();
    DataContext = vm;
    await vm.InitializeAsync();
}

不要在构造函数中使用异步方法,而是在事件中注册并使用它,您可以在事件中等待它:

public MainWindow()
{
    InitializeComponent();
    Loaded += InitializeOnLoaded;
}

public async void InitializeOnLoaded(object sender, RoutedEventArgs e)
{
    var vm = new MainViewModel();
    DataContext = vm;
    await vm.InitializeAsync();
}

您是希望视图模型按顺序初始化,还是希望它们同时初始化?检查
Update
方法中的空
catch
子句是否捕获了任何异常。计时器似乎将无限期运行。我不知道你是如何在不同时使用Stop()func?@NedStoyanov的情况下完成计时器的任务的。我会试试你的建议。@QuanNguyen这就是问题所在,它会在无限循环中不断更新第一个吗?@NedStoyanov我得到了很多。。。System.FormatException:输入字符串的格式不正确。\at System.Globalization.TimeSpanFormat.FormatCustomized(TimeSpan值、字符串格式、DateTimeFormatInfo dtfi)at System.Globalization.TimeSpanFormat.For