埋め込みリソースに保存されているスクリプトを実行する 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() を呼び出す必要があるようです。
乾杯