BackGroundWorker不在后台执行

时间:2011-11-22 17:59:18

标签: c# asp.net .net

当我加载页面时,我只能在后台工作程序完成后导航...它是否应该在后台执行,如名称所示?

这是代码:

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

5 个答案:

答案 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

两个都经过测试