Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';t更新System.Web.UI.WebControls.Label';从线程事件中删除文本_C#_Asp.net_Multithreading - Fatal编程技术网

C# Can';t更新System.Web.UI.WebControls.Label';从线程事件中删除文本

C# Can';t更新System.Web.UI.WebControls.Label';从线程事件中删除文本,c#,asp.net,multithreading,C#,Asp.net,Multithreading,在我的C#ASP.NET项目中,我有一个后台线程,可以进行一些处理。我想在后台进程开始和结束时向用户显示。为此,在我的背景代码中: public static void RefreshNavigationElements() { TimeInfoEventArgs timeInformation = new TimeInfoEventArgs("WPALoading has started"); WorkProductAgreements.OnSecondChange(timeI

在我的C#ASP.NET项目中,我有一个后台线程,可以进行一些处理。我想在后台进程开始和结束时向用户显示。为此,在我的背景代码中:

public static void RefreshNavigationElements()
{
    TimeInfoEventArgs timeInformation = new TimeInfoEventArgs("WPALoading has started");
    WorkProductAgreements.OnSecondChange(timeInformation);
    WPA_Supers.Clear();
    PopulateWPAs();
    timeInformation.myMessage = "WPALoading has ended";

    WorkProductAgreements.OnSecondChange(timeInformation);
}
正在侦听事件的代码:

public void TimeHasChanged(TimeInfoEventArgs ti)
{
    Label11.Text = ti.myMessage;
    System.Diagnostics.Debug.WriteLine(ti.myMessage);
}
在调试器中单步执行显示,
TimeHasChanged
函数在适当的时间被调用,并在
ti
中包含正确的文本。
Debug.WriteLine
命令输出正确的消息。但是
标签11
文本不会在页面上更改

我对事物的理解不是很深刻,我认为我只需要刷新页面,或者类似的东西,但我不能,就我的一生而言,想出如何做到这一点


我已尝试将
标签
放在
更新面板
中。每次调用
TimeHasChanged
时,我都尝试创建一个新标签。但我的任何尝试似乎都没有带来任何不同。任何帮助都将不胜感激。

在ASP.NET中,当浏览器请求页面时,服务器启动一个线程来呈现页面并将其发送回浏览器。呈现页面后,线程完成,所有相关的后台工作人员也完成。此时页面将按原样发送回浏览器。因此,除非您显式地等待后台工作程序完成,否则它将永远不会完成并更新页面内容

您可以在此处使用一些技术:

但是,如果后台工作程序需要相当长的时间才能执行,因为在线程完成之前页面不会发送到浏览器,那么浏览器中可能会出现超时或无响应的页面

为了避免这种情况,您可以使用AJAX和web服务:在web服务方法中公开后台工作程序的功能,并使用AJAX执行此方法。此方法完成后,可以直接在浏览器中更新标签。当这种情况发生时,浏览器仍能响应

为此,您可以使用jQuery和ASP.NETWeb服务,如所述

最后,永远不要在ASP.NET中运行很长的进程:服务器会不时地回收(重新启动)应用程序,这可能会突然停止web服务方法的执行