退出后C#控制台应用程序仍在内存中 – 异步Web服务
发布时间:2020-12-15 17:24:27 所属栏目:百科 来源:网络整理
导读:我是C#和.Net的新手.我的老板让我使用Web服务使用异步回调创建一个计时器.我实际上创建了它,并让它工作,但每当我关闭控制台应用程序窗口时,Web服务仍在运行.当我重新运行应用程序时,它从0开始计数器,但是来回跳转到前一次运行的数字(仍然在记忆中). mainMeth
我是C#和.Net的新手.我的老板让我使用Web服务使用异步回调创建一个计时器.我实际上创建了它,并让它工作,但每当我关闭控制台应用程序窗口时,Web服务仍在运行.当我重新运行应用程序时,它从0开始计数器,但是来回跳转到前一次运行的数字(仍然在记忆中).
mainMethod()每10秒将数字增加1,monitorMethod()读取该数字,并返回一个字符串. 如何停止Web服务,并在每次关闭控制台窗口时将计数器重置为0? 我希望这是有道理的!提前致谢! 这是我的代码. 网络服务: public class Service1 : System.Web.Services.WebService { private int iTotal; private int iCurrent; [WebMethod] public void mainMethod() { iTotal = 42; iCurrent = 1; Application["iTotal"] = iTotal; Application["iCurrent"] = iCurrent; // sleep 10 seconds while (iCurrent <= iTotal) { Application["iCurrent"] = iCurrent; iCurrent++; System.Threading.Thread.Sleep(10000); } } [WebMethod] public string monitorMethod() { iCurrent = int.Parse(Application["iCurrent"].ToString()); iTotal = int.Parse(Application["iTotal"].ToString()); if (iCurrent <= iTotal) { return iCurrent + " of " + iTotal; } else return "DONE"; } } } 客户端 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebApplication1 { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender,EventArgs e) { Service1 client = new Service1(); //web service proxy client.mainMethodCompleted += new mainMethodCompletedEventHandler(client_mainMethodCompleted); if (Session["value"] == null) { Session["value"] = true; } if (!IsPostBack) { client.BeginmainMethod(AsyncCallback,null); string scriptFunction = "<script type="text/javascript">function reSubmit(){ document.getElementById("" + btnProcessNext.ClientID + "").click(); }</script>"; this.RegisterClientScriptBlock("s1",scriptFunction); string script = "<script type="text/javascript">setTimeout("reSubmit()",500);</script>"; this.RegisterStartupScript("submit",script); } else { if (StringParseByMe(lblStatus.Text)) { string scriptFunction = "<script type="text/javascript">function reSubmit(){ document.getElementById("" + btnProcessNext.ClientID + "").click(); }</script>"; this.RegisterClientScriptBlock("s1",scriptFunction); string script = "<script type="text/javascript">setTimeout("reSubmit()",500);</script>"; this.RegisterStartupScript("submit",script); } else return; } } protected void btnProcessNext_Click(object sender,EventArgs e) { Service1 client = new Service1(); string label = client.monitorMethod(); Session["value"] = StringParseByMe(label); lblStatus.Text = label; } private bool StringParseByMe(string sparse) { if (sparse == "DONE") return false; string[] sparseArray = sparse.Split(' '); if (int.Parse(sparseArray[0]) == int.Parse(sparseArray[2])) { return false; } else return true; } void client_mainMethodCompleted(object sender,System.ComponentModel.AsyncCompletedEventArgs e) { Service1 client = new Service1(); client.EndmainMethod(ar); } public void AsyncCallback(IAsyncResult ar) { } } } 网页 <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> <h2> Counter</h2> <br /><br /><br /><br /><br /><br /> <asp:Label ID="lblStatus" runat="server" Text="0 of -1" Font-Bold="True" Font-Size="XX-Large" ForeColor="#CC0000"></asp:Label> <br /><br /><br /><br /> <asp:Button ID="btnProcessNext" runat="server" Text="Refresh" onclick="btnProcessNext_Click" /> </asp:Content> 解决方法
您可以在页面上放置一个按钮,并在按钮的单击事件中编写停止计时器的逻辑.之后,生成一个脚本来关闭窗口.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |