asp.net文本框未从其他任务更新

时间:2013-05-30 08:23:03

标签: asp.net multithreading gridview textbox task

我有一个GridView,并且SelectedIndexChanged代码被解雇了:

protected void grdEntry_SelectedIndexChanged(object sender, EventArgs e)
{
    lblAssignId.Text = grdEntry.SelectedRow.Cells[1].Text == " " 
                       ? ""
                       : grdEntry.SelectedRow.Cells[1].Text;
    Ob.BranchId = Globals.BranchID;
    Ob.AssignId = lblAssignId.Text;
    DataSet dsMain = GetAssignDetails(Ob);
    if (dsMain.Tables[0].Rows.Count != 0)
    {
        // some other code
        Task.Factory.StartNew(() => FillMemberShipAndBarCode(dsMain.Tables[0].Rows[0]["CustomerCode"].ToString(), Ob.BranchId));
    }
}

和填写会员ID的代码是

private void FillMemberShipAndBarCode(string customerCode, string branchId)
{
    var sqlCommand = new SqlCommand
    {
        CommandText = "sp_customermaster",
        CommandType = CommandType.StoredProcedure
    };
    sqlCommand.Parameters.AddWithValue("@CustomerCode", customerCode);
    sqlCommand.Parameters.AddWithValue("@BranchId", branchId);
    sqlCommand.Parameters.AddWithValue("@Flag", 18);
    var data = PrjClass.GetData(sqlCommand);
    txtMemberShip.Text = data.Tables[0].Rows[0]["MembershipId"].ToString();
    txtBarCode.Text = data.Tables[0].Rows[0]["Barcode"].ToString();    
}

它工作正常,但是没有更新任何文本框。此外,我在观察窗口中检查,值按预期返回(M-1213634-98-4),代码确实到达txtMemberShip.Text = data.Tables[0].Rows[0]["MembershipId"].ToString();点 但txtMemberShip只是空了???任何人都可以告诉我为什么不更新文本框?

更新

根据评论,这是页面加载

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        BindDropDown();
        BindGrid();
        SetDefaultsInTextBoxes();
    }
}

我没有任何等待此任务的代码。

1 个答案:

答案 0 :(得分:1)

不要这样做:

Task.Factory.StartNew(() => FillMemberShipAndBarCode(dsMain.Tables[0].Rows[0]["CustomerCode"].ToString(), Ob.BranchId));

你想通过这样做实现什么目标?

可能发生的是你的方法FillMemberShipAndBarCode可能在ASP.NET已经将页面发送回浏览器之后运行。因此,基本上,对呈现的HTML没有可见的影响。

ASP.NET不是一个做多线程的好地方。

尝试用以下方法替换上述内容:

FillMemberShipAndBarCode(dsMain.Tables[0].Rows[0]["CustomerCode"].ToString(), Ob.BranchId);