简体   繁体   English

定位.NET 4.0方法中的异步

[英]Async In Targeting .NET 4.0 Method

I am using the below syntax in my webform .net 4.0 project. 我在Webform .net 4.0项目中使用以下语法。 However, once it hits the dropdown1.DataSource = tasks[0].Result.Tables[0]; 但是,一旦点击dropdown1.DataSource = tasks[0].Result.Tables[0]; I get a NullReferenceException error. 我收到NullReferenceException错误。

I know generally this error is thrown because a proper assignment was not made, however, in my syntax it looks to me like I made all applicable assignments needed. 我知道通常会由于未进行适当的分配而引发此错误,但是在我的语法中,它看起来像我进行了所有需要的适用分配。 What do I need to alter/change/modify in my syntax below in order to have the drop down populated appropriately? 为了使下拉列表正确填充,我需要在下面的语法中进行哪些更改/更改/修改?

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;
        });
    }
}
}    

I talked about this in another question: Use 1 DataReader For Multiple Database Calls . 我在另一个问题中谈到了这一点: 使用1 DataReader进行多个数据库调用 In your case, you're in a user control, then you need to call Page.RegisterAsyncTask method instead of simply RegisterAsyncTask 在您的情况下,您处于用户控件中,那么您需要调用Page.RegisterAsyncTask方法,而不是简单的RegisterAsyncTask

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM