通过代码刷新WPF-Control我试图禁用一个按钮以拒绝对该按钮的垃圾点击。我使用刷新委托来呈现调用控件,但它显示为已启用。connect()-Methode大约需要4秒,按钮显示为已启用。哪里有问题?publicstaticclassExtensionMethods{privatestaticActionEmptyDelegate=delegate(){};publicstaticvoidRefresh(thisUIElementuiElement){uiElement.Dispatcher.Invoke(DispatcherPriority.Render,EmptyDelegate);){this.Cursor=Cursors.Wait;buttonConnect.IsEnabled=false;buttonConnect.Refresh();如果(buttonConnect.Content.Equals(“连接”)){连接();}else{断开连接();}按钮连接。已启用=真;buttonConnect.Refresh();this.Cursor=Cursors.Arrow;由于这一切似乎都发生在UI-Thread上,UI之间没有时间更新,因此您需要在后台线程上运行任务,并在完成后再次更改UI(例如,使用一个已经有RunWorkerCompleted事件的BackgroundWorker)。例如button.IsEnabled=false;varbw=newBackgroundWorker();bw.DoWork+=(s,_)=>{//长时间运行的东西。};bw.RunWorkerCompleted+=(s,_)=>按钮.IsEnabled=true;bw.RunWorkerAsync();更好的是,为什么不使用ICommand绑定而不是处理事件,您可以实现CanExecute,您可以在其中返回true/false,具体取决于您是否要启用/禁用按钮,这就是ICommand一个很好的例子就是您'重新确定一种方法以“渲染”而不实际进行任何渲染。我会说使用异步调用将是最好的做法,让布局引擎有时间渲染:以上是C#学习教程:通过代码刷新WPF-Control共享的所有内容,如果对大家有用的话和需要了解更多C#学习教程,希望大家多多关注~buttonConnect.IsEnabled=false;动作action=buttonConnect.Content.Equals("Connect")?连接:断开连接;newAction(()=>{action();Dispatcher.Invoke(()=>{buttonConnect.IsEnabled=true;this.Cursor=Cursors.Arrow;});}).BeginInvoke(null,null);}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
