加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

我如何在WPF中“DoEvents”?

发布时间:2020-12-17 00:03:07 所属栏目:大数据 来源:网络整理
导读:我读过C#版本如下: Application.Current.Dispatcher.Invoke( DispatcherPriority.Background,new Action(delegate { })); 但是我无法弄清楚如何将空委托放入VB.NET,因为VB.NET似乎不支持匿名方法.想法? 编辑:可能这个? Application.Current.Dispatcher.I
我读过C#版本如下:
Application.Current.Dispatcher.Invoke(
          DispatcherPriority.Background,new Action(delegate { }));

但是我无法弄清楚如何将空委托放入VB.NET,因为VB.NET似乎不支持匿名方法.想法?

编辑:可能这个?

Application.Current.Dispatcher.Invoke(
  DispatcherPriority.Background,New Action(Sub()

             End Sub))
VB.NET确实支持匿名委托,但仅作为单语句函数. (多语句匿名函数和匿名子函数已添加到.NET 4中的VB10)

为了提供上下文,DoEvents旨在允许单线程环境在工作完成时更新UI并处理其他Windows消息.调用DoEvents(或者,正如您在此处所做的那样,通过在调度程序上执行“null”函数来间接执行此操作)应该没有任何好处,因为UI线程应该自行更新.

但是,为了回答你的问题,最简单的选择是这样的:

Application.Current.Dispatcher.Invoke(DispatcherPriority.Background,_
    New Action(Function() 7))

但是,再一次,我看不出这会实际发生什么.

如果您正在寻找的只是如何在UI线程上执行代码(如Windows窗体中的Control.Invoke),那么Dispatcher.Invoke(这是您正在使用的)是正确的,您只需要将您的内联匿名方法转换为谨慎的函数,并将其作为代理传递.可能有一些你可以逃脱匿名离开.例如,如果你正在做的只是更新进度条,你可以这样做:

Application.Current.Dispatcher.Invoke(DispatcherPriority.Background,_
    New Action(Function() progressBar.Value = 100))

这是有效的,因为所有赋值都返回存储在赋值左侧的值.但是,你不能像这样调用一个sub(除非SomeFunctionName返回一个值,否则以下内容不会编译):

Application.Current.Dispatcher.Invoke(DispatcherPriority.Background,_
    New Action(Function() SomeFunctionName(params)))

换句话说,C#代码中的任何匿名委托都可以:

>不止一个声明
>不要返回值(意味着它只是对方法的单个调用,而不是函数)

然后,您必须为这些函数创建函数并将委托传递给这些函数,而不是像在C#中那样内联代码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读