当前位置: 首页 > 编程语言 > C#

后台工作人员访问UI的正确方式分享

时间:2023-04-11 00:34:49 C#

后台工作人员访问UI的正确方式我不确定我这样做是否正确,但我使用了以下代码(单击button1,执行_DoWork)。问题是:如何调用UI获取textbox1和textbox2的值,因为他们在不同的线程,所以无法调用。我应该使用调度程序吗?privatevoidbutton1_Click(objectsender,RoutedEventArgse){if(textBox1.Text==""){MessageBox.Show("请输入用户名和密码","Error",MessageBoxButton.OK,MessageBoxImage.Warning);}else{bw.DoWork+=newDoWorkEventHandler(bw_DoWork);bw.RunWorkerAsync();}}privatevoidbw_DoWork(objectsender,DoWorkEventArgse){Console.WriteLine("asd");UserManagementum=newUserManagement(sm.GetServerConnectionString());如果(um.AuthUser(textBox1.Text,textBox2.Password)){MainWindowmw=newMainWindow();mw.Show();这个。关闭();}else{if(um.Timeout){MessageBox.Show("无法连接到服务器,请检查您的配置","Error",MessageBoxButton.OK,MessageBoxImage.Error);}else{MessageBox.Show("用户名或密码不正确","Error",MessageBoxButton.OK,MessageBoxImage.Error);我应该使用后台工作者吗?可以通过RunWorkerAsync调用的参数给worker传递数据,通过DoWorkEventArgs.Result...类AuthUserDat传递数据a{公共字符串名称;公共字符串密码;}privatevoidbutton1_Click(objectsender,EventArgse){varauthData=newAuthUserData(){Name=textBox1.Text,Password=textBox2.Text};worker.RunWorkerAsync(authData);}voidworker_DoWork(objectsender,DoWorkEventArgse){//在工作线程上...无法从此处进行UI调用。varauthData=(AuthUserData)e.Argument;UserManagementum=newUserManagement(sm.GetServerConnectionString());e.Result=嗯;e.Cancel=um.AuthUser(textBox1.Text,textBox2.Password));}voidworker_RunWorkerCompleted(objectsender,RunWorkerCompletedEventArgse){//回到UI线程....UI调用又很酷了。varresult=(UserManagement)e.Result;if(e.Cancelled){//如果UserManagement.AuthUser成功,则执行操作。}else{//如果UserManagement.AuthUser失败,请执行操作。}}顾名思义,后台工作者不会在UI线程上运行,你只能在UI线程上访问UI控件。解决此问题的一种简单方法是在需要新“对象”时保存所需的文本框属性,然后将其传递给RunWorkerAsync。e.Argument中的DoWork方法可以使用这个对象。但是,在工作线程上显示表单时也会出现问题。您不能直接从BackgroundWorker访问UI元素。为此,您必须使用Dispatcher。从DependencyObject派生的WPF对象具有线程关联性,这意味着只有实例化它们的线程才能访问它们的成员。查看下面的链接,看看代码示例是否对您有帮助http://social.msdn.microsoft.com/Forums/en/wpf/thread/4858bcaf-1cb2-410b-989a-18b874ffa458以上是C#学习教程:后台工作者访问UI的正确方式分享的所有内容,如果对大家有用,需要了解更多C#学习教程,希望大家多多关注——this.Dispather.Invoke((Action)delegate(){this.Close();});本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢