C# 无法隐式转换';数据表';至';任务<;数据表>';

C# 无法隐式转换';数据表';至';任务<;数据表>';,c#,asynchronous,async-await,task,C#,Asynchronous,Async Await,Task,我得到一个错误: 无法将类型“System.Data.DataTable”隐式转换为“System.Threading.Tasks.Task” 执行GetExternalMessage需要时间,因此WinForm停止响应。 因此,我想到应用“任务等待”。但我还是犯了一个错误。如何在任务中返回数据表 下面是我正在尝试的代码: private void button1_Click(object sender, EventArgs e) { dtFrom.Format = DateTimePi

我得到一个错误:

无法将类型“System.Data.DataTable”隐式转换为“System.Threading.Tasks.Task”

执行GetExternalMessage需要时间,因此WinForm停止响应。 因此,我想到应用“任务等待”。但我还是犯了一个错误。如何在任务中返回数据表

下面是我正在尝试的代码:

private void button1_Click(object sender, EventArgs e)
{
    dtFrom.Format = DateTimePickerFormat.Short;
    dtTo.Format = DateTimePickerFormat.Short;
    DataTable dt = new DataTable();
    //dt =  GetExtMsg(dtFrom.Text, dtTo.Text);

}

async Task<DataTable> GetExtMsg(string dateFrom, string dateTo)
{
    DL dl = new DL();
    DataTable dt = new DataTable();
    dt =  dl.GetExternalMessage(dateFrom, dateTo);
    Task<DataTable> tastDT = dt;

}
private void按钮1\u单击(对象发送者,事件参数e)
{
dtFrom.Format=DateTimePickerFormat.Short;
dtTo.Format=DateTimePickerFormat.Short;
DataTable dt=新的DataTable();
//dt=GetExtMsg(dtFrom.Text,dtTo.Text);
}
异步任务GetExtMsg(字符串dateFrom,字符串dateTo)
{
DL=新的DL();
DataTable dt=新的DataTable();
dt=dl.GetExternalMessage(dateFrom,dateTo);
任务tastDT=dt;
}

正如错误所说,您不能隐式(或显式地)将
数据表
转换为
任务

发件人:

如果异步方法的return语句指定了TResult类型的操作数,则将Task指定为该方法的返回类型。

因此,您只需从方法中返回
DataTable
对象,如下所示:

async Task<DataTable> GetExtMsg(string dateFrom, string dateTo)
{
 DL dl = new DL();
 DataTable dt = new DataTable();
 dt =  dl.GetExternalMessage(dateFrom, dateTo);
 return dt;
}

如何在Button1_Click()中使用此GetExtMsg?我已更新了答案,但答案中包含的MSDN链接中已经提供了一个
async…Wait
示例。我仍然无法获得响应窗口。它只是在执行函数时挂起。1。这是不可能回答没有看到其他代码涉及。2.这是另一个问题。如有必要,请提出新问题并链接此问题。谢谢
private async void button1_Click(object sender, EventArgs e)
{
 dtFrom.Format = DateTimePickerFormat.Short;
 dtTo.Format = DateTimePickerFormat.Short;
 DataTable dt = new DataTable();
 dt = await GetExtMsg(dtFrom.Text, dtTo.Text);
}