如何在网站的流程结束时显示消息?

时间:2013-03-05 11:37:01

标签: c# asp.net process system.diagnostics

当我点击网页上的开始按钮(asp.net网站)时,我想开始一个过程,现在我想将标签文本设置为处理开始。我希望在流程结束时将标签文本设置为“处理完成”。如何在asp.net和C#中执行此操作。

提前致谢。

4 个答案:

答案 0 :(得分:3)

您可能需要考虑使用ASP.NET SignalR。以下是它的作用摘要:

  

ASP.NET SignalR是一个面向ASP.NET开发人员的新库   非常简单,可以为您的实时添加实时网络功能   应用。什么是“实时网络”功能?这是   能够让服务器端代码将内容推送到连接的   客户实时发生

以下是一个简单网页示例,其中包含一个以Notepad.exe开头的按钮。流程启动后,页面上的标签会显示process started。当流程退出(Notepad已关闭)时,标签会更新为process exited

因此,首先创建一个ASP.NET空Web应用程序项目(让我们将其命名为 MyWebApplication )并获取Microsoft ASP.NET SignalR NuGet package。将Web表单添加到项目中并将其命名为 Test 。将以下代码添加到 Test.aspx 文件中:

<%@ Page Language="C#" AutoEventWireup="true" 
    CodeBehind="Test.aspx.cs" Inherits="MyWebApplication.Test" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="http://code.jquery.com/jquery-1.8.2.min.js" 
        type="text/javascript"></script>
    <script src="Scripts/jquery.signalR-1.0.1.js" type="text/javascript"></script>
    <script src="/signalr/hubs" type="text/javascript"></script>
    <script type="text/javascript">
        $(function () {
            // Proxy created on the fly          
            var chat = $.connection.chat;
            // Declare a function on the chat hub so the server can invoke it          
            chat.client.addMessage = function (message) {
                $('#label').text(message);
            };
            // Start the connection
            $.connection.hub.start();
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager runat="server" />
        <div>
            <asp:UpdatePanel runat="server">
                <ContentTemplate>
                    <asp:Button runat="server" Text="Start Notepad.exe"
                        ID="button" OnClick="button_Click" />
                </ContentTemplate>
                <Triggers>
                    <asp:AsyncPostBackTrigger 
                        ControlID="button" EventName="Click" />
                </Triggers>
            </asp:UpdatePanel>
            <span id="label"></span>
        </div>
    </form>
</body>
</html>

向项目添加新的类文件并将其命名为Chat。在 Chat.cs 中,您将拥有:

using Microsoft.AspNet.SignalR;

namespace MyWebApplication
{
    public class Chat : Hub
    {
        public void Send(string message)
        {
            //Call the addMessage method on all clients     
            var c = GlobalHost.ConnectionManager.GetHubContext("Chat");
            c.Clients.All.addMessage(message);
        }
    }
}

将以下内容添加到 Test.aspx.cs 文件中:

using System;
using System.Diagnostics;
using Microsoft.AspNet.SignalR;

namespace MyWebApplication
{
    public partial class Test : System.Web.UI.Page
    {
        Chat chat = new Chat();

        protected void Page_Load(object sender, EventArgs e)
        {
        }

        void MyProcess_Exited(object sender, EventArgs e)
        {
            chat.Send("process exited");
        }

        protected void button_Click(object sender, EventArgs e)
        {
            Process MyProcess = new Process();
            MyProcess.StartInfo = new ProcessStartInfo("notepad.exe");
            MyProcess.EnableRaisingEvents = true;
            MyProcess.Exited += MyProcess_Exited;
            MyProcess.Start();
            chat.Send("process started");
        }
    }
}

添加 Global.asax 文件:

using System;
using System.Web.Routing;

namespace MyWebApplication
{
    public class Global : System.Web.HttpApplication
    {
        protected void Application_Start(object sender, EventArgs e)
        {
            RouteTable.Routes.MapHubs();
        }
    }
}

我没有涉及的一些事情:

  1. 标签在所有连接上都会更新。
  2. 我没有验证进程是否已经运行(但这应该不是很难检查)。

答案 1 :(得分:0)

使用javascript进行回调。在每个舞台上;启动,完成或错误;更新HTML中的标签。如果您使用jQuery AJAX查找一些示例,这应该相当简单。

jQuery AJAX POST example

答案 2 :(得分:0)

在CodeBehind中添加:

ScriptManager.RegisterStartupScript(this, GetType(), "Records Inserted Successfuly", "Showalert();", true);

JAVASCRIPT在源代码(aspx)中添加它:

 function Showalert() {
            alert('Records inserted Successfully!');
        }

并使用System.Web.UI进行添加;

你可以在aspx中简单地将一个Label添加到webform中。

<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

并在codebehind aspx.cs中添加..

Labelname.Text = "whatever msg you wanna display."

答案 3 :(得分:0)

如果您不想使用javascript ...您可以做的是在触发按钮点击事件时首先更改标签文字。

lblLabel.text="process started"

和button_click事件中的最后一行应该是:

lblLable.text="process completed";