3

I want to start a process when i clicked the start button on webpage (asp.net site) now i want to set the label text to process started. and i want to set the label text to "Process Completed " when the process is ended. how to do this in asp.net and C#.

Thanks in advance.

4

4 回答 4

3

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

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

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

因此,首先创建一个 ASP.NET 空 Web 应用程序项目(我们将其命名为MyWebApplication)并获取Microsoft ASP.NET SignalR NuGet 包。向项目中添加一个 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. 我没有验证进程是否已经在运行(但这应该不是很难检查)。
于 2013-03-05T14:34:24.767 回答
0

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

lblLabel.text="process started"

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

lblLable.text="process completed";
于 2013-03-05T13:06:23.670 回答
0

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

jQuery AJAX POST 示例

于 2013-03-05T11:44:59.400 回答
0

在 CodeBehind 中添加:

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

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

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

并使用 System.Web.UI 添加;

或者

您可以像这样在 aspx 中简单地将标签添加到网络表单。

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

并在代码隐藏 aspx.cs 添加 ..

Labelname.Text = "whatever msg you wanna display."
于 2013-03-05T12:53:50.403 回答