当我加载页面时,我只能在后台工作程序完成后导航...它是否应该在后台执行,如名称所示?
这是代码:
protected void Page_Load(object sender, EventArgs e)
{
BackgroundWorker _bgk = new BackgroundWorker();
_bgk.DoWork += new DoWorkEventHandler(DoWork_BackGroundWork);
_bgk.RunWorkerCompleted += new RunWorkerCompletedEventHandler(WorkComplete_BackGroundWork);
_bgk.RunWorkerAsync();
}
private void DoWork_BackGroundWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i < 99999; i++)
{
Trace.Write("STILL EXECUTING BACKGROUND WORKER");
}
}
private void WorkComplete_BackGroundWork(object sender, RunWorkerCompletedEventArgs e)
{
Trace.Write("===================== BACKGROUND WORKER FINISHED ===================");
}
答案 0 :(得分:6)
BackgroundWorker
无法很好地使用ASP.NET。
除此之外,除非你喜欢玩火,否则启动后台线程会让IIS可以在你不知道的情况下回收你的线程。最好不要在ASP.NET环境中使用这种类型的线程(不要说曾经,但要弄清楚它可能很棘手)
答案 1 :(得分:2)
BackgroundWorker
仅适用于Windows窗体,不适用于ASP.NET。
除非您是多线程专家,否则最好不要在ASP.NET中使用任何后台线程。
答案 2 :(得分:2)
BackgroundWorker
仅适用于使用WindowsForms
。
如果要模拟相同的功能,请改用Thread
,但要小心使用ASP.NET中的线程,确保您所做的事情不会影响客户端 - 服务器通信。
答案 3 :(得分:2)
如果您必须使用线程,请使用ThreadPool.QueueWorkerItem(...)
答案 4 :(得分:0)
如果有人和我有同样的问题......这是一个很好的解决方案,对我来说就像一个魅力。
http://www.codeproject.com/KB/cs/AsyncMethodInvocation.aspx
这是一个更好的解决方案:
http://weblogs.asp.net/albertpascual/archive/2009/05/14/fire-and-forget-class-for-asp-net.aspx
两个都经过测试