C# 目标.NET 4.0方法中的异步

C# 目标.NET 4.0方法中的异步,c#,asp.net,webforms,task,C#,Asp.net,Webforms,Task,我在webform.NET4.0项目中使用以下语法。但是,一旦它到达下拉列表1.DataSource=tasks[0].Result.Tables[0]我得到一个NullReferenceException错误 我知道通常会抛出此错误,因为没有进行正确的赋值,但是,在我的语法中,看起来好像我进行了所有需要的适用赋值。为了正确填充下拉列表,我需要在下面的语法中修改/更改/修改什么 namespace NETAsyncLowVersion { public partial class Webform

我在webform.NET4.0项目中使用以下语法。但是,一旦它到达
下拉列表1.DataSource=tasks[0].Result.Tables[0]我得到一个
NullReferenceException
错误

我知道通常会抛出此错误,因为没有进行正确的赋值,但是,在我的语法中,看起来好像我进行了所有需要的适用赋值。为了正确填充下拉列表,我需要在下面的语法中修改/更改/修改什么

namespace NETAsyncLowVersion
{
public partial class WebformLVAsync : System.Web.UI.UserControl
{
    private class1 _class1 = new NC1();
    private DataSet DS = new DataSet();

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Task.Factory.ContinueWhenAll(new[]{ SqlQuery1() }, tasks =>
            {
                try 
                {
                    dropdown1.DataSource = tasks[0].Result.Tables[0];
                }
                catch (Exception exception) { throw exception; }
            }, CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
        }
    }
    private void SqlQuery1()
    {
        dropdown1.DataSource = _class1.SqlQuery1(databaseconn);
    }

public class class1
{
    private DataSet DS = new DataSet();
    private Databaselayer _Databaselayer = new Databaselayer();

    public DataSet SqlQuery1(string databaseConnection)
    {
        DS = new DataSet();
        _Databaselayer.SqlQueryBuilder = new StringBuilder();
        _Databaselayer.SqlQueryBuilder.Append("Select managername from salesdatabase");
        return _Databaselayer.FDS(databaseConnection, _Databaselayer.SqlQueryBuilder.ToString());
    }           
}
public class Databaselayer
{
    public System.Threading.Tasks.Task<DataSet> FDS(string connectionString, string sqlQuery)
    {
        return System.Threading.Tasks.Task.Factory.StartNew(() =>
        {
            var dataSet = new DataSet();
            using (var adapter = new SqlDataAdapter(sqlQuery, connectionString))
                adapter.Fill(dataSet);

            return dataSet;
        });
    }
}
}    
名称空间NETAsyncLowVersion
{
公共部分类WebformLVAsync:System.Web.UI.UserControl
{
私有类1_class1=新的NC1();
私有数据集DS=新数据集();
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!IsPostBack)
{
Task.Factory.ContinueWhenAll(新[]{SqlQuery1()},tasks=>
{
尝试
{
dropdown1.DataSource=tasks[0]。Result.Tables[0];
}
catch(异常){throw Exception;}
},CancellationToken.None,TaskContinuationOptions.None,TaskScheduler.FromCurrentSynchronizationContext());
}
}
私有void SqlQuery1()
{
dropdown1.DataSource=_class1.SqlQuery1(databaseconn);
}
公共班级1
{
私有数据集DS=新数据集();
私有数据库层_Databaselayer=新数据库层();
公共数据集SqlQuery1(字符串数据库连接)
{
DS=新数据集();
_Databaselayer.SqlQueryBuilder=新的StringBuilder();
_Databaselayer.SqlQueryBuilder.Append(“从salesdatabase中选择managername”);
返回_Databaselayer.FDS(databaseConnection,_Databaselayer.SqlQueryBuilder.ToString());
}           
}
公共类数据库层
{
public System.Threading.Tasks.Task FDS(字符串连接字符串、字符串sqlQuery)
{
返回System.Threading.Tasks.Task.Factory.StartNew(()=>
{
var数据集=新数据集();
使用(var adapter=newsqldataadapter(sqlQuery,connectionString))
adapter.Fill(数据集);
返回数据集;
});
}
}
}    

我在另一个问题中谈到了这一点:。在您的情况下,您处于用户控件中,那么您需要调用Page.RegisterAsyncTask方法,而不是简单地RegisterAsyncTask

您从哪里获得任务[0]?确保它存在,并检查它是否不存在null@Saleem-据我所知,我从DatabaseLayer类返回的任务不是吗?我知道如果直接在SQL Server中运行sqlQuery,它会返回结果。您的代码不完整:您无法将System.Threading.Tasks.Task强制转换为DataSet@Jeroen-所以问题源于我的数据库elayer我在哪里使用System.Threading.Tasks.Task但尝试返回数据集?@NadineSmithJonesPicard是否已在代码库中添加扩展方法的类?