2016-08-16 38 views
0

工作我正在使用c#(.aspx)。ScriptManager.RegisterClientScriptBlock不能从任务

我有按钮的OnClick回调如下:

protected void btnReplay_Click(object sender, EventArgs e) 
{ 
    Task.Factory.StartNew(() => 
    { 
     //Code thats take 30secs to run 
     ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "script", "ShowMessage('Done');", true); 
    }); 
} 

在这种情况下ShowMessage功能不叫,但如果我改变代码如下:

protected void btnReplay_Click(object sender, EventArgs e) 
{ 
    //Code thats take 30secs to run 
    ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "script", "ShowMessage('Done');", true); 
    }); 
} 

的函数ShowMessage被调用。
为什么它的发生和我如何解决它?或者你可以建议请任何其他方式来执行我的代码?

感谢

+0

你试过Task.Run()吗? – Raskayu

+0

我的答案能解决您的问题吗?如果是,请考虑将其标记为解决方案。 – bsoulier

回答

0

运行任务不会让你btnReplay_Click方法等待你的任务完成。

这意味着你的任务没有完成之前你的方法返回(因此你的ScriptManager不能访问已经被渲染的页面)。

这就是为什么它在你的代码的第二个版本上工作(没有更多的任务)。

如果方法结束对于在客户端进行的验证不是至关重要的,您应该尝试将长时间运行的代码包装为asynchonously或运行它in background