2016-03-14 61 views
0

我在我的webform .net 4.0項目中使用了下面的語法。但是,一旦它遇到dropdown1.DataSource = tasks[0].Result.Tables[0];我得到一個NullReferenceException錯誤。Async In Targeting .NET 4.0方法

我通常知道這個錯誤是因爲沒有進行適當的賦值而引發的,但是,在我的語法中,它看起來像我做了所有需要的適用賦值。我需要在下面的語法中更改/更改/修改以便使下拉列表適當地填充?

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

沒喲哪裏有任務[0]?確保它存在,並檢查它是否爲空 – Saleem

+0

@Saleem - 我的理解是不是我從我的DatabaseLayer類返回的任務?我知道sqlQuery返回結果,如果我直接在SQL Server中運行它。 – NadineSmithJonesPicard

+0

你的代碼不完整:你不能將System.Threading.Tasks.Task 轉換爲DataSet –

回答

0

我在另一個問題:Use 1 DataReader For Multiple Database Calls中談到過這個問題。在你的情況,你是在一個用戶控件,那麼你需要調用Page.RegisterAsyncTask方法,而不是簡單地RegisterAsyncTask

+0

@NadineSmithJonesPicard您是否在代碼庫中添加了擴展方法的類? –