更新 これは、私が経験している興味深い問題です。バックグラウンド プロセスの実行中に進行状況ダイアログを表示する必要があります。通常、これは機能しますが、問題は、バックグラウンド プロセス内でパブリックな静的データを設定する必要があることです。これが私が達成しようとしているものの例です:
パブリック部分クラス MainWindow : Window { public static Service バインディング。 public static Result lr; public progressDialog dlg; プライベート無効ログイン() { 文字列 sPwd = txtPwd.Password; 文字列 sEmail = txtEmail.Text; バインディング = 新しいサービス (); lr = binding.login(sEmail, sPwd); } private void btnLogin_Click(オブジェクト送信者, RoutedEventArgs e) { BackgroundWorker ワーカー = 新しい BackgroundWorker; worker.DoWork += 新しい DoWorkEventHandler(worker_DoWork); worker.RunWorkerCompleted += 新しい RunWorkerCompletedEventHandler(worker_RunWorkerCompleted) worker.RunWorkerAsync(); dlg = 新しい進行状況ダイアログ(); dlg.Show(); ログインする(); } private void worker_DoWork(オブジェクト送信者, DoWorkEventArgs e) { e.Result = login(); } private void worker_RunWorkerCompleted(オブジェクト送信者, RunWorkerCompletedEventArgs e) { this.Hid(); Window1 newWindow = new Window1(); newWindow.Show(); dlg.Close(); }
login() は void であり、実際には DoWork イベントの e.Result で使用する値を返さないため、これが機能しないことはわかっています。ただし、パラメーターを渡すログイン クラスを設定しましたが、UI スレッドにアクセスできないというエラーが引き続き表示されます。主な問題は、lr とバインディングが別のウィンドウからアクセスされるため、パブリックな静的データでなければならないことです (別のウィンドウから public static Service binding = MainWindow.binding; を設定します)。これを正確に設定する方法について頭を悩ませているだけです。