Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.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# 来自新线程的进度状态_C#_Asp.net_Ajax_Multithreading - Fatal编程技术网

C# 来自新线程的进度状态

C# 来自新线程的进度状态,c#,asp.net,ajax,multithreading,C#,Asp.net,Ajax,Multithreading,我正在一个新线程中执行耗时的任务 ParameterizedThreadStart pts = new ParameterizedThreadStart(WorkingFoo); Thread thread = new Thread(pts); WorkingFoo执行任务并跟踪进度步骤 (它可以返回“步骤”总数和当前步骤) 我想在进度条中显示这些信息(简单的div或ajax控件,我不介意) 当然,我不希望可视化地刷新显示进度的页面。 此外,我想尽可能减少回发的数量 那我该怎么做呢? 如何

我正在一个新线程中执行耗时的任务

 ParameterizedThreadStart pts = new ParameterizedThreadStart(WorkingFoo);
 Thread thread = new Thread(pts);
WorkingFoo执行任务并跟踪进度步骤 (它可以返回“步骤”总数和当前步骤)

我想在进度条中显示这些信息(简单的div或ajax控件,我不介意)

当然,我不希望可视化地刷新显示进度的页面。
此外,我想尽可能减少回发的数量

那我该怎么做呢?
如何在网页上显示新线程的当前进度

此外,显示进度的页面可以关闭和重新选择,并且仍然可以获得当前状态


请不要使用jQuery。

首先,除非您确定需要,否则不要从ASPNET页面或应用程序启动这样的新线程使用线程池。


关于您的问题-如何在不刷新页面的情况下在浏览器中获取进度更新。。。我假设您知道如何在jQuery中使用进度控件。您的问题集中在如何将这样的进度控制连接到服务器端逻辑。唯一的方法是通过从浏览器到服务器的请求(我建议使用ajax)

如果我是你,我会为工作线程提供一种方法,将其状态放入服务器上的资源中——用户会话、数据库或类似的东西。然后,让来自页面的ajax请求查询该状态

在REST场景中,状态可能在以下位置可用:

http://myserver/Application/WorkItem12345/status
…其中,
WorkItem12345
是一个id,它指向异步发生的工作者或任务。在从页面到服务器的URL上执行HTTP GET,您将得到一个指示状态的JSON结果,可能如下所示:

{"message": "working", "progress":56}

等等

服务器上必须有响应
http://myserver/Application/WorkItem12345/status
并用相应的消息进行回复。此状态逻辑应该查看工作线程发布其状态的插槽或资源(无论您选择使用什么),然后构造并返回JSON


附录
如果您不想使用jQuery,机制是相同的,但是您需要编写自己的浏览器端UI小部件来显示状态更新。在这个简单的例子中,它是一个包含html内容的简单div,显示JSON响应。如果你想让它更漂亮,你可以把它做成一个真正的矩形条,随着工作的进行而增长

但是如何构建这个小部件,是另一个问题的主题



另请参见:

好的,我想我可以使用线程池,因为可以启动的线程数量有限(只有具有有限角色的用户才能访问此页面)。抱歉,忘记注意:请不要使用jQuery。我将使用会话存储进度状态。关于小部件,这不是问题,我会处理它。我需要更多关于AJAX请求的解释。为什么我需要使用HTTPGET来获取状态参数?为什么我不能只存储回调参数,然后在客户机上调用回调函数呢?因为客户机是一个客户机。它发送请求,但不接收请求。您可以使用各种方法来解决这个问题,但一般来说,客户机需要“驱动”。客户端请求,服务器响应。
{"message": "completed", "progress":100}
{"message": "fault", "progress":14}