我已经编写了一个C#应用程序,它接受字段输入并通过网络发送一些数据。
private void btnNext_Click(object sender, RoutedEventArgs e)
{
SendDetail_Click();
}
private async void SendDetail_Click()
{
try
{
bool isNumOnly1 = Textbox1.Text.Any(char.IsLetter);
bool isNumOnly2 = Textbox2.Text.Any(char.IsLetter);
if(!isNumOnly1 || !isNumOnly2)
return;
bool boolVali = await System.Threading.Tasks.Task.Run(() => callNetworkMsg());
while (true)
{
await Task.Delay(1000);
}
}
catch(Exception e)
{
}
}
上面是我的代码段。
问题是当我在验证(如果语句检查)发生之前运行应用程序时,await被调用并发送网络消息。但是如果我在if
条件上放置一个断点,验证将发生,然后转到await函数。
为什么会出现这种情况,如何预防?请指教。
请尝试以下操作:
>
通过更改void==>的返回类型来返回任务;任务
将onclick更改为同步方法
专用异步任务btnNext_Click(object sender,RoutedEventArgs e){等待SendDetail_Click();}
专用异步任务SendDetail_Click(){try{bool isNumOnly1=textbox1.text.any(Char.IsLetter);bool isNumOnly2=textbox2.text.any(Char.IsLetter);
if(!isNumOnly1 || !isNumOnly2)
return;
//If callNetworkMsg is async, keep this,
await System.Threading.Tasks.Task.Run(async () => {
callNetworkMsg());
return Task.FromResult(1);
}
//Use this if callNetworkMsg is async/Task
//await callNetworkMsg()
}
catch(Exception e)
{
}
}