1

我不太确定线程是如何工作的。

这是我的代码。单击发送按钮后:

protected void BtnSend_Click(object sender, EventArgs e)
{
    Thread threadA = new Thread(SendSMS);
    threadA.Start();
}

protected void SendSMS()
{
    //some validations here
    Thread threadB = new Thread(loadingScreen);
    threadB.Start();
    threadB.Join();
    //code that actually sends the required Mail
    threadB.Stop();
    loading.Visible = false;
}

threadB 正在调用这个方法,它基本上是一个 div(称为加载),带有一个加载 div,它禁止用户按屏幕上的任何内容:

protected void loadingScreen()
{
    loading.Visible = true;
}

现在正在发送邮件,但加载屏幕 (div) 不可见。我究竟做错了什么?

4

4 回答 4

4

当您编写 ASP.NET 与富客户端应用程序时,您必须重新考虑。简而言之(真的很短)Web 浏览器(客户端)向服务器发送请求。服务器处理该请求(该部分是您的代码),并将结果返回给 Web 浏览器。

当您在代码隐藏中显示 DIV 时,做一些工作,然后再次隐藏它,只有结果会到达 Web 浏览器。

有多种方法可以实现你想要的光学效果,但你必须先了解 ASP.NET 的生命周期。例如,从这里开始。

于 2013-07-22T09:46:59.787 回答
2

我认为您在计算一项庞大的任务时需要一个可响应的应用程序。在 WinForms 中你必须小心,因为如果你想改变一些 UI,比如标签中的文本,你必须同步两个线程。(UI-Thread 和 Thread1)如果您正在运行 .NET 4.0,您应该使用 Task-Class,因为您不需要同步并且还可以使用匿名方法。

protected void SendSMS()
{
    loading.Visible = true;

    var task = Task.Factory.StartNew(()=>{//code that actually sends the required Mail}

    task.Wait();
    loading.Visible = false;
}
于 2013-07-22T09:52:19.303 回答
0

实际上加载变得可见然后迅速隐藏。启用 Div 后加入立即返回,然后发送电子邮件,再次禁用 Div。发送电子邮件和禁用发生在同一个线程中。

于 2013-07-22T09:28:09.053 回答
0

你为什么使用线程B?您只能使用 threadA 进行操作:

protected void SendSMS()

{

//这里有一些验证

loading.Visible = false;

//code that actually sends the required Mail

loading.Visible = false;

}

跨线程操作异常警告。

于 2013-07-22T09:41:34.950 回答