0

私のプログラムは win フォーム (c#) です。外部プログラムを開き、そのメイン ウィンドウのプリントスクリーンを実行して、閉じます。Process.Start() を使用すると、プログラムを開くことができますが、すべてのフォーカスがプログラムに集中し、コードが停止します。自分でフォームを閉じたときにのみフォームが続行されますが、スクリーンショットには遅すぎます。では、コードを強制的に実行し続けるにはどうすればよいでしょうか?

    public void Runttk(string maromnum)
    {
        Process runttk = new Process();
        runttk.StartInfo.UseShellExecute = true;               
        runttk.StartInfo.FileName = @"C:\\program.exe";
        runttk.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
        runttk.Start();
        this.Focus();
        try
        {
            if (runttk.WaitForInputIdle()==true)
            {                                          
                PringJpg(maromnum);
                Killttk();
            }
        }
        catch (Exception e)
        {
        }

    }

ありがとうございました

更新: 最終的に私は Thread.Sleep(3000) を使用しました。残酷ですが、トリックを行います。外部プログラムをアップロードしたフィナーレと私のコードの間の同期が十分に明確ではなかったため、backgroundworker を使用しませんでした。

4

2 に答える 2

1

コードを試してみましたが、notepad.exe などの別のプログラムを使用すると、メモ帳が実行され、PringJpg を呼び出した場所に制御がドロップされます。

したがって、問題は if (runttk.WaitForInputIdle()==true) でブロックされていることだと思います。この操作にタイムアウトを追加してみてください。

于 2012-08-09T10:20:55.003 に答える
1

おそらく、あなたのプログラムは決してアイドル状態ではありません - つまりrunttk.WaitForInputIdle()==true、アプリを閉じるまで待機させます。

制限を追加する(たとえばrunttk.WaitForInputIdle(500)==true)は、ニーズを満たす必要があります。

于 2012-08-09T10:16:51.247 に答える