在加载过程后完成操作

时间:2013-06-13 17:27:41

标签: c# .net visual-studio-2010

问题在于,我工作的地方有很多计算机文盲。我们有4个应用程序必须按顺序运行,以便这些人可以完成他们的工作。他们必须运行无线卡,然后运行思科VPN,在VPN连接后,他们必须运行传输程序,然后是允许他们完成工作订单的移动应用程序。

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

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

以下是按钮的代码:

    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,依此类推。

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

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

尝试执行此类程序的弱点是,如果用户在下次启动之前需要对每个应用程序执行非零工作量,他们最终可能只需单击快速单击所有步骤继承,不执行任何配置,并想知道为什么事情不起作用。您可能想要调查您正在使用的程序,以查看它们是否可以自动化(可能通过命令行或配置文件),并从用户那里取消工作,这样他们就不会自行填写不同的方式。