更新 这是我遇到的一个有趣的问题。我需要在后台进程运行时显示进度对话框。通常,这会起作用,但问题是我需要在后台进程中设置公共静态数据。这是我试图完成的一个例子:
公共部分类 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;)。我只是在思考如何设置它时遇到了一些麻烦。