线程似乎没有在后台运行

时间:2013-11-26 14:32:16

标签: c# asp.net multithreading asynchronous .net-4.0

我有以下代码:

public class BaseControlClass : System.Web.UI.UserControl
{
    protected delegate void AsyncronousAction();
    protected virtual void FAsyncEvent() { } //Overidden on derived classes.

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
            FPerformAsyncronousTasks(FAsyncEvent);
    }

    protected virtual void FPerformAsyncronousTasks(AsyncronousAction AsyncCallback)
    {
        new Thread(delegate()
        {
            AsyncCallback();
        }).Start();
    }
}

public class DerivedControlClass : BaseClass
{
    protected override void FAsyncEvent()
    {
        //Contact web service, wait for results, add to local database.
    }
}

我期待的是加载页面和我的派生类中的FAsyncEvent()中的代码在幕后运行,但是在FAsyncEvent()中的代码具有之前页面才完成加载完成。

我在这里做错了吗?

编辑奇怪的是,我注意到我是否做了清洁 - >构建然后运行代码,它工作正常,页面完成加载,同时联系Web服务。后续运行意味着页面等待线程完成处理。

1 个答案:

答案 0 :(得分:1)

您的代码保持对UserControl的引用,可能阻止请求继续。尝试将静态方法传递给新线程,就像快速检查一样,看看它是否有帮助。