我是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>
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。