C# 将winform转换为ASP.NET,保留进度显示信息

C# 将winform转换为ASP.NET,保留进度显示信息,c#,asp.net,silverlight,progress,C#,Asp.net,Silverlight,Progress,我有许多C#2.0 winforms应用程序需要转换为web应用程序。进程被封装在对象中。由于进程可能需要一些时间,我们通过将控件传递给对象的进程方法来更新进度,并在需要提供更新状态时使用Application.DoEvents()。例如: public string Process(label progressLabel) { int count=0; List<string> items = GetItemsToProcess();

我有许多C#2.0 winforms应用程序需要转换为web应用程序。进程被封装在对象中。由于进程可能需要一些时间,我们通过将控件传递给对象的进程方法来更新进度,并在需要提供更新状态时使用Application.DoEvents()。例如:

    public string Process(label progressLabel)
    {
        int count=0;
        List<string> items = GetItemsToProcess();

        foreach(string item in items)
        {
            // code to process goes here
            if (count % 100 == 0)
            {
                progressLabel.Text = String.Format("Processed {0} of {1} items", count, items.Count);
                Application.DoEvents();
            }
        }
    }
公共字符串进程(label progressLabel)
{
整数计数=0;
List items=GetItemsToProcess();
foreach(项中的字符串项)
{
//要处理的代码在这里
如果(计数%100==0)
{
progressLabel.Text=String.Format(“已处理{1}项中的{0}”,计数,项数);
Application.DoEvents();
}
}
}
我希望能够在网页中使用这些类中的一个,同时进行尽可能少的更改。我已经删除了对Application.DoEvents()的调用,并尝试将标签嵌入到UpdateProgress选项卡中,但直到流程完成,标签才会更新


修改这些类型的方法以便在web应用程序(ASP.NET或Silverlight)中显示进度的最佳方法是什么?

概述了一种结合使用两个web服务和AJAX更新面板来显示流程进度的方法。它可能也适合您的需要。

由于您现在受到客户机/服务器关系的限制,您最好的选择可能是实现某种AJAX解决方案。对AJAX的解释可能超出了SO答案的范围,因此我建议您阅读一下AJAX,看看它如何应用于您当前的问题

在asp.net应用程序中使用AJAX的两种常用方法:

出于许多原因,我更喜欢jQuery,但是对于AJAX新手来说,内置ASP.NET可能会更容易

谷歌写了一篇很好的教程,介绍了什么是AJAX以及如何使用AJAX。你可以在这里找到它:

下面是一个很好的例子,专门用于将AJAX与ASP.NET结合使用:


虽然这可能更容易,但至少开始使用工具包——特别是更新面板——我认为使用jQuery会更好,因为这样你就更清楚自己在做什么。