use*_*654 1 c# asp.net multithreading c#-4.0
我有网络表单应用程序.在一种形式上,我有一些功能.这被称为同步并需要一些时间.所以我需要在不同的线程中调用它们.
这是我正在做的样本:
    protected void Page_Load(object sender, EventArgs e)
    {
        Thread t1 = new Thread(new ThreadStart(Function1));
        t1.Start();
        Thread t2 = new Thread(new ThreadStart(Function2));
        t2.Start();
    }
    private void Function1()
    {
        Thread.Sleep(5000);
        lbl1.Text = "Function1 completed";
    }
    private void Function2()
    {
        Thread.Sleep(5000);
        lbl2.Text = "Function2 completed";
    }
如果我调试(设置breackpoints)lbl1.Text = "Function1 completed";并被lbl2.Text = "Function2 completed";调用,但最终的html页面上的文本没有变化.
页面加载也不需要5秒.
ps我知道asp网络有所不同,但我不知道我做错了什么.
在呈现和返回页面之前,没有什么可以等待你的线程完成 - 这就是错误的.
在Page_Load()函数结束时(或在页面渲染生命周期的最新点),添加:
t1.Join();
t2.Join();
另外:你不应该更新线程proc中的lbl1和lbl2  - 你应该将结果存储在变量中并反映主渲染线程中的计算值(即一次Join返回).
编辑:虽然这解决了问题中的问题,但请按照Vano的回答推荐使用PageAsyncTask.