我正在尝试在wpf中实现微调器。如果正在获取数据,则应显示微调框,但一旦获取所有数据,则应隐藏微调框。我知道我必须使用async并等待它才能工作,但是下面的代码不起作用。
private async Task onGetFiles(object sender, RoutedEventArgs e)
{
if (txtIpAddress.Text.Contains("IP Address"))
{
MessageBox.Show("Ip Address is invalid");
return;
} else if (string.IsNullOrEmpty(dpDate.Text))
{
MessageBox.Show("Date is invalid");
return;
}
var date = dpDate.Text;
var splitDate = date.Split('/');
int month = Convert.ToInt32(splitDate[1]);
int day = Convert.ToInt32(splitDate[0]);
var year = splitDate[2];
var filePath = $@"\\{txtIpAddress.Text}\i\Hardware Interfacing\{year}\{month}\{day}\PeripheralLogsDq.txt";
using (new ImpersonateUser("username", "", "password"))
{
IsWaveActive = true;
await Task.Run(() => LoadLogs(rbQueue, File.ReadAllText(filePath)));
await Task.Run(() => LoadLogs(rbQueue, File.ReadAllText(filePath)));
IsWaveActive = false;
}
}
private bool LoadLogs(RichTextBox rtb, string msg)
{
try
{
FlowDocument flowDocument = new FlowDocument();
Paragraph paragraph = new Paragraph();
paragraph.Inlines.Add(new Run(msg));
flowDocument.Blocks.Add(paragraph);
rtb.Document = flowDocument;
return true;
}
catch
{
return false;
}
}
我的错误是
Error CS0407 'Task MainWindow.onGetFiles(object, RoutedEventArgs)' has the wrong return type MenuAnimation C:\Users\Rodne\OneDrive\Desktop\AnimatedMenu1-master\MenuAnimation\MainWindow.xaml 188 Active
尝试编译时出现此错误,所以我无法运行它。
答案 0 :(得分:2)
不幸的是,异步事件处理程序(似乎是onGetFiles
)通常必须声明为async void
1 而不是async Task
。
这很不幸,因为这意味着无法使用通常的基于Task
的基础架构来确定他们完成工作的时间。
但是,如果IsWaveActive
是实现“显示微调框直到完成”功能的方式,则应该可以正常工作。
1 因为事件处理程序的委托类型明智,因此声明为void
返回而不是具有任何类型的返回值。
答案 1 :(得分:0)
您是否await
异步方法onGetFiles
?您最好将方法重命名为onGetFilesAsync
,以免忘记等待它!