3

問題は、私が働いている職場にはコンピューターに疎い人がたくさんいることです。これらの人が仕事を完了することができるように、順番に実行する必要がある 4 つのアプリケーションがあります。彼らはワイヤレス カードを実行し、次に Cisco VPN を実行し、VPN 接続後にトランスポート プログラムを実行し、続いて作業指示を完了するためのモバイル アプリケーションを実行する必要があります。

私の目標は、プログラムを段階的に実行する実行可能なアプリケーションを用意することで、このばかげた証拠を作成する (または私ができる限り証明する) ことです。現在のところ、プログラムにはステップ 1 ~ 4 の 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

1 つのオプションは、プロセスをバックグラウンド スレッドで起動してから、プロセスが起動Process.WaitForInputIdle()されて「準備完了」状態になるまで待機することです。その後、プロセスの 2 番目のステップなどを開始できます。

于 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 に答える