我计划实例化对象(类),根据用户的输入进行大量的数学计算。我的直觉是我可以在输出URL(页面)上加载动画wait-GIF,然后定义新类,设置参数,启动一个线程,然后在完成后重新加载空白页。 ASP.NET已经捆绑了动画等待GIF吗?另外,默认情况下,完成后不会对已关闭的对象(类)进行GC(垃圾回收)吗?这样,如果有多个用户,ASP服务器将只有多个线程。只是一些问题,因为我的大部分经验都是WinForms。
答案 0 :(得分:1)
是的,这是对的。在button_click中执行所有处理。正在为您在页面中实例化一个类。 Asp.net将为同时用户处理所有线程。
答案 1 :(得分:0)
虽然您没有提到您正在使用的是哪种Web框架,但我个人会在AJAX请求后面执行此类计算。使用和控件向用户提供反馈(wait-GIF动画),直到请求完成。这些功能已捆绑在标准ASP.NET站点中。不要在ASP.NET应用程序中实例化自己的线程。 ASP.NET已经是多线程的,能够处理对应用程序的同时请求。您的示例HTML代码可能如下所示:
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
html code goes here. somewhere you might have a button which triggers a postback that will trigger the start of your math computations...
<asp:LinkButton ID="Button1" runat="server" OnClick="Button1_Click">Start Computations</asp:LinkButton>
</ContentTemplate>
</asp:UpdatePanel>
页面上的其他位置包含updateprogress标记。您可以看到我已将此标记与触发回发的更新面板ID相关联。
<asp:UpdateProgress DisplayAfter="100" runat="server" ID="udp" AssociatedUpdatePanelID="UpdatePanel1">
<ProgressTemplate>
put your animated gif here using an <img /> tag
</ProgressTemplate>
</asp:UpdateProgress>
使用服务器控件在计算完毕后在页面上重新显示计算文本。
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Label id="lblResults" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
并点击按钮后面的代码
protected void Button1_Click(object sender, EventArgs e)
{
//do your computations here
lblResults.Text = "the answer";
UpdatePanel2.Update();
}
祝你好运!