更新 这是我遇到的一个有趣的问题。我需要在后台进程运行时显示进度对话框。通常,这会起作用,但问题是我需要在后台进程中设置公共静态数据。这是我试图完成的一个例子:
公共部分类 MainWindow : 窗口 { 公共静态服务绑定; 公共静态结果 lr; 公共进度对话框 dlg; 私人无效登录() { 字符串 sPwd = txtPwd.密码; 字符串 sEmail = txtEmail.Text; 绑定=新服务(); lr = binding.login(sEmail, sPwd); } 私人无效btnLogin_Click(对象发送者,RoutedEventArgs e) { BackgroundWorker 工作者 = 新的 BackgroundWorker; worker.DoWork += new DoWorkEventHandler(worker_DoWork); worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted) worker.RunWorkerAsync(); dlg = 新进度对话框(); dlg.Show(); 登录(); } private void worker_DoWork(object sender, DoWorkEventArgs e) { e.Result = login(); } 私人无效工人_RunWorkerCompleted(对象发送者,RunWorkerCompletedEventArgs e) { this.Hid(); 窗口 1 新窗口 = 新窗口 1(); 新窗口.Show(); dlg.关闭(); }
我知道,就目前而言,它不会起作用,因为 login() 是一个 void 并且实际上并没有返回一个值以在 DoWork 事件中与 e.Result 一起使用。但是,我已经设置了一个登录类来传递参数,但我仍然收到错误消息,指出我无法访问 UI 线程。主要问题是 lr 和 binding 被另一个窗口访问,所以它们必须是公共静态数据(从另一个窗口我设置 public static Service binding = MainWindow.binding;)。我只是在思考如何设置它时遇到了一些麻烦。