3

问题是我工作的地方有很多电脑文盲。我们必须运行 4 个应用程序才能让这些人完成他们的工作。他们必须运行无线网卡,然后是 Cisco VPN,在 VPN 连接后,他们必须运行传输程序,然后是允许他们完成工作订单的移动应用程序。

我的目标是通过让他们可以运行的应用程序逐步运行程序来制作这个愚蠢的证明(或尽可能证明)。截至目前,该程序只有 4 个按钮,步骤 1-4。现在它加载时只有“步骤 1”可见,当他们点击它时,它会运行第一个程序,然后显示下一个按钮,并且还会使当前按钮变为绿色,并带有说明程序已启动的文字,并且还使其不可点击防止他们打开程序 30 次(因为他们会)。

所有这一切都很好,一个按钮一个按钮。但我想做的是单击第 1 步(按钮标签“Step1”),然后它在按钮中显示“正在启动程序”的文本,当程序启动时,它会将按钮更改为绿色背景“Program Started”为文本,然后显示下一个按钮。

这是按钮的代码:

    private void Form1_Load(object sender, EventArgs e)
    {
        Rectangle workingArea = Screen.GetWorkingArea(this);
        this.Location = new Point(workingArea.Right - Size.Width, workingArea.Bottom - Size.Height);
        Step2.Visible = false;
        Step3.Visible = false;
        Step4.Visible = false;
    }

    private void Step1_Click(object sender, EventArgs e)
    {
        Step1.BackColor = Color.LightGreen;
        Step1.Text = "Verizon Wireless Card";
        string strVzWireless = "C:\\Program Files (x86)\\Verizon Wireless\\VZAccess Manager\\VZAccess Manager.exe";
        Process VzWireless = Process.Start(strVzWireless);
        Step2.Visible = true;
        Step1.Enabled = false;
    }

    private void Step2_Click(object sender, EventArgs e)
    {
        Step2.BackColor = Color.LightGreen;
        Step2.Text = "Cisco VPN Client";
        string strCisco = "C:\\Program Files (x86)\\Cisco\\Cisco AnyConnect VPN Client\\vpnui.exe";
        Process Cisco = Process.Start(strCisco);
        Step3.Visible = true;
        Step2.Enabled = false;
    }

    private void Step3_Click(object sender, EventArgs e)
    {
        Step3.BackColor = Color.LightGreen;
        Step3.Text = "Client Rf Transport";
        string strRfTransport = "C:\\MWM\\MobileStation\\RfTransport\\RfTransport.exe";
        Process RfTransport = Process.Start(strRfTransport);
        Step4.Visible = true;
        Step3.Enabled = false;
    }

    private void Step4_Click(object sender, EventArgs e)
    {
        Step4.BackColor = Color.LightGreen;
        Step4.Text = "Mobile Station";
        string strMobileStation = "C:\\MWM\\MobileStation\\Station.exe";
        Process MobileStation = Process.Start(strMobileStation);
        Step4.Enabled = false;
    }

有任何想法吗?我只希望按钮 1 根据正在运行的进程的状态更改颜色和文本,然后显示按钮 2,依此类推。

4

2 回答 2

6

一种选择是在后台线程上启动您的进程,然后Process.WaitForInputIdle()等待它启动并处于“就绪”状态。然后,您可以启动该过程中的第二步,等等。

于 2013-06-13T17:31:27.440 回答
2

Process.WaitForInputIdle()可能是您正在寻找的 - 它会等到进程准备好接受消息,这通常是进程开始时间的一个很好的指标。(http://blogs.msdn.com/b/oldnewthing/archive/2010/03/25/9984720.aspx

尝试执行这样的程序的缺点是,如果用户在下一次启动之前需要对每个应用程序执行非零工作量,他们可能最终只需快速连续单击所有步骤,执行没有配置,想知道为什么事情不起作用。您可能想调查您正在使用的程序,看看它们是否可以自动化(也许通过命令行或配置文件),并从用户身上卸下工作,这样他们就不会最终将自己浪费在不同的方法。

于 2013-06-13T17:37:13.303 回答