1

埋め込みリソースに保存されているスクリプトを実行する powershell カスタム ホストを備えた WPF アプリがあります。読み込み後、ユーザーが実行ボタンをクリックすると、スクリプトが呼び出されますが、次のエラーが表示されます。

ユーザーがコマンドを中断したため、コマンドの実行が停止しました

ユーザー (つまり、私) はスクリプトを中断するために何もしなかったので、これはある種のスレッドの問題であると推測しています。

アプリケーションは、スクリプトをすぐに実行するように指示するコマンド ライン パラメータも受け入れます。この機能を最初に追加したとき、スクリプトは完全に実行されましたが、これが完了するまで WPF UI が表示されなかったので、メイン ウィンドウ ビュー モデルのスタートアップに次を追加しました。

        var bgWork = new BackgroundWorker();
        bgWork.DoWork += (s,e) => { };
        bgWork.RunWorkerCompleted += (s,a) =>
        {
            var app = (Application.Current as App);

            if (app.ExecuteImmediate && StartCommand.CanExecute(null))
                StartCommand.Execute(null);

        };
        bgWork.RunWorkerAsync();

BackgroundWorker は、UI スレッドで Completed コードを実行します。これは、私が頻繁に使用するちょっとしたトリックであり、ほとんど問題なく動作します。

だから、私が知っている長い質問ですが、誰かが私が間違っていることを知っていますか?

副次的な問題または関連する問題として、プロセスの実行中にデータバインディングを介してUIを更新する際にも問題があります。たとえば、ステータス バーに IDLE と BUSY を切り替えるステータス インジケータがありますが、これは手遅れになるまで変化しないようです。バインディングは正常に機能していますが、古い VB DoEvents() を呼び出す必要があるようです。

乾杯

4

1 に答える 1

0

コーヒーと数分間のデバッグの後、これを解決しました。

エラーが発生したのは、PromptForChoice メソッドを完全に実装していなかったためです。

ただし、バインディングの更新にはまだ問題があります。

于 2010-11-27T23:41:51.707 に答える