异步的返回类型错误

时间:2019-04-11 09:49:04

标签: c#

我正在尝试在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

尝试编译时出现此错误,所以我无法运行它。

2 个答案:

答案 0 :(得分:2)

不幸的是,异步事件处理程序(似乎是onGetFiles)通常必须声明为async void 1 而不是async Task

这很不幸,因为这意味着无法使用通常的基于Task的基础架构来确定他们完成工作的时间。

但是,如果IsWaveActive是实现“显示微调框直到完成”功能的方式,则应该可以正常工作。


1 因为事件处理程序的委托类型明智,因此声明为void返回而不是具有任何类型的返回值。

答案 1 :(得分:0)

您是否await异步方法onGetFiles?您最好将方法重命名为onGetFilesAsync,以免忘记等待它!