首页 > 语言 > 关键词  > 控制台最新资讯  > 正文

WinForm程序中使用控制台作为输出窗口

2009-07-30 15:57 · 稿源:中国IT实验室

Lambda表达比代表定义和带外方法定义的结合更清楚,且相关的额外工作只需要满足语言定义即可。不过,它也有一些不足之处。如果某个方法的参数包含System.Delegate 这样的抽象类型,用lambda表达式介绍特殊的问题:C#编译器不能将lambda表达式转换成还未明确定义的衍生代表类型。

如果不仔细思考一下,你的代码看上去就会像是来自.NET1.0的东西。在本文中,我将告诉告诉你为什么lambda表达式不足以被直接转换成抽象代表类型,并且教你怎样使得编译器转换你所定义的指定代表。解决方案依赖于Windows Presentation Foundation(WPF)和System.Windows.Threading.Dispatcher组件,但是严格意义上说,该问题不是一个WPF问题。文中所描述的问题出现在若干.NET框架中,包括Windows Forms,Office 应用程序接口和映射应用程序接口。你可以按照下列方法来处理同类问题。

无论我什么时候使用.NET框架中带有来自代表表格的参数的应用程序接口,我都会倾向于使用lambda表达式而不是更详细的表达式。例如,这行代码创建了一个System.Windows.Threading.Timer,在计时器失效时,该代码调用了一个TickHandler方法:

以下为引用的内容:

tick = new System.Threading.Timer((unused) => 
      

TickHandler());

如果方法的内容足够少,我就会用方法的内容替代TickHandler()方法调用。该方法大多数情况下都有效,但是当应用程序接口将System.Delegate作为参数时,这一技巧不管用。例如,我们将System.Windows.Controls.Dispatcher.Invoke()方法穿过WPF中的线程实施调用:

以下为引用的内容:

public object Invoke( 

delegate method,

params object[] args)

现在考虑一下当我们尝试用lambda表达式来执行这样的调用时,将会发生什么:

以下为引用的内容:

MyTime.Dispatcher.Invoke(() => DoSomething());

会出现隐秘错误:

以下为引用的内容:

error CS1660: Cannot convert lambda expression to
     

type 'System.Delegate' because it is not a delegate type

或许第一次看到这个错误的时候,你还不知道到底是怎么一回事。当然,这的确是一个代表类型。编译器不像人一样的灵活。System.Delegate类型是一个抽象类型,且该类型的推理工具不能推断出自变量或某些用于未知代表类型的返回值的数量和种类。要解决这一问题,我们必须创建一个具体的代表类型并为该类型指定lambda表达式。记住,代表类型要求你将方法视为数据。

我创建了一个WPF计时器程序来展示其工作原理,其中阐述了C#3.0 怎样简化与老式应用程序接口(下图)的运行。

当你做演示的时候,该示例中的应用程序运行了一个计时器,随着设定时间流逝,它的颜色会从绿色转为黄色再转为红色。这是一个很好的演示跨线程调用的方法,因为该计时器在背景线程中运行。

按照时间的改变来更新演示要求对出自计时器的事件作出响应。计时器在背景线程中运行,所以你会很轻易地犯我们在前面提到过的错误。

更新应用程序

用户界面处理的是简单代码。当计时器失效时它会生效,而且代码会更新计时器的显示。这一更新必须改变文本,或控制背景。如下所示:

以下为引用的内容:

      MyTime.Background = newBrush; 
      

MyTime.Content = label

计时器在背景线程上运行,所以你需要通过使用Dispatcher.Invoke()边界线执行调用。这两行代码是你想列入lambda表达式的代码,不是证明方法定义的逻辑理由。但是我之前就讲过lambda不会与Didpatcher.Invoke一起运行,除非是你使用了具体的代表定义才行。这之中的一部分已经在.NET框架3.5中定义了。

  • 相关推荐
  • 大家在看
  • Google Play控制台曝光Moto Tab G70平板 采用联发科迅鲲芯片组

    Abhishek Yadav 在 Twitter 上指出:摩托罗拉或很快推出一款高性价比的平板电脑,它就是刚刚被 Google Play 控制台列表给曝光的 Moto Tab G70 。规格清单表明,该机采用了联发科 MT8183A 芯片组。外界猜测它是即将推出的迅鲲(Kompanio)SoC 家族的新成员之一,因为 Kompanio 500 的代号就是 MT8183 。据悉,迅鲲(Kompanio)是联发科专为平板电脑和 PC 而设计的新系列芯片组。此外 Moto Tab G70 配备了 4GB RAM + 64 / 128GB ROM?

  • 谷歌Play控制台曝光三星Galaxy S21 FE:骁龙888与Exynos 2100都有

    三星很可能在 2022 年 1 月推出跳票已久的 Galaxy S21“Fan Edition”,然而近日,有眼尖的人发现它已经被 Google Play 控制台被曝光。更有趣的是,除了高通骁龙 888 版本,Exynos 2100 芯片组也没有缺席。配置方面,该机或采用 6.4 英寸屏幕、64MP 主摄、以及 4500 mAh 电池。通常情况下,三星会为特定市场推出配备高通骁龙 / 自家 Exynos 芯片组的旗舰设备(无论 4G 或 5G),去年的 Galaxy S20 FE 也是如此。91Mobiles 推测,印

  • YouTube应用程序获得监听控制

    Android和iOS上的YouTube应用程序进行了全新的升级,可对所有视频进行收听控制。目前,这项功能似乎是高级订户独有的。访问控件是通过设置菜单完成的,尽管一些音乐视频自动建议通过弹出窗口为您打开控件YouTube应用程序上的监听控件(图像:9到5谷歌)您可以通过播放、暂停和上一个或下一个视频以及10秒回放/转发按钮获得一组常用控件。"控制"页还具有"相似"、"保存"和"速度播放"控件。有了这些功能,常规的YouTube应用程序正打算

  • SiFive发布Performance P650:RISC-V应用处理器新旗舰

    作为 RISC-V 的行业领导者,SiFive 刚刚宣布了 Performance P650 处理器。顾名思义,P650 是 SiFive Performance 高性能应用处理器家族的最新成员,可为数据中心、移动、车载、边缘计算等领域提供有力的支持。预计不久后,下游市场将陆续迎来基于 SiFive Performance P650 的硬件实例。(来自:SiFive 官网)SiFive 联合创始人兼首席技术官 Yunsup Lee 博士称:SiFive 使命是响应半导体行业对更多处理器 IP 选项的呼吁,公司专注于

  • 国产特斯拉Model Y Performance高性能版配备12V锂离子电池

    据国外媒体报道,国产Model YPerformance高性能版车主发现,该版本车型使用了新款12V锂离子电池。据悉,特斯拉Model Y于2021年1月1日首次进入中国市场,并于今年1月18日在中国开始首批交付。

  • ARM Win10运行64位程序被砍:微软今后只支持Win11

    有在ARM平台使用Win10的朋友吗?一个稍稍有些沮丧的消息要分享,微软宣布,ARM Win10将不再支持模拟运行64位程序,比如Autodesk Sketchbook、《火箭联盟》游戏等,刚需用户必须将本地操作系统升级到Windows 11。据悉,大约1年前微软开始测试Windows 10 on ARM对x64程序模拟运行的支持,没想到最终还是被放弃。不过,微软并没有明确为何突然放弃这一Win10特性,但考虑到微软今日同时宣布将加快Win11的推送步伐,看来是急于争取升级?

  • 给城市增添最美的亮色:HARMAY

    有些人,是灵魂和灵魂的相契合,才能迸发出最美的烟火。HARMAY 話梅一直在不断寻找新鲜有趣的艺术灵感,不断刷新我们对于美好生活的想象。从上海、到北京、成都,通过不同的创意设计主题,在不同的城市和地点创造不同的审美标准,城市中央那一座座独立的話梅大楼,就像一个丰富城市的新符号,也是HARMAY 話梅最与众不同的地方。把HARMAY 話梅当成家逛HARMAY 話梅,似乎已经成为很多人每周的必修课。作为一家现象级的新零售美妆集合

  • HARMAY話梅:把故事孕育在门店中

    彼时,谁都不知道HARMAY话梅会成为美妆零售界的一个神话,但从开始,就能看到HARMAY话梅对于创造的追求,与众不同。HARMAY话梅从不避讳出身,它最早是从一间小小的仓库开始,随着线上到线下的慢慢扩张,现在已经成为很多潮流达人心中的美好生活理想国,但这条路,走得并非一帆风顺,其中的艰辛只有HARMAY话梅的坚守者才会明白。出发伊始,带来惊喜满满事到如今,每每提到成都晶融汇店,都能感慨一番。门店最大特色便是以蜿蜒“蜀道

  • 让购物和生活紧紧相连│HARMAY美妆店

    这段时间的话梅,可以用乘风破浪四个字来形容,进入 2021 年的下半年,HARMAY話梅接连在北京、上海新开门店,而这一次,HARMAY話梅来到的千年古城西安。黑科技的无限衍生相较于HARMAY話梅的初期“美妆集合店”,如今的HARMAY話梅已经发展成为了“美妆及生活品类零售品牌”,也因此在西安小寨店内,不仅仅只有主打的彩妆和护肤品,还涵盖了家居香氛、黑科技仪器及小部分的零食产品。HARMAY話梅小寨店分为两个楼层,其中一层为面部彩

  • 中国微控制器(MCU)厂商盘点

    北京兆易创新科技股份有限公司 主要内核:M23 主要产品:闪存、微控制器、DRAM 主要应用:汽车/工业、计算行业、消费电子、物联网、网络/电信、移动设备 公司简介:兆易创新成立于2005,是一家领先的无晶圆厂半导体公司,致力于开发先进的存储器技术和IC解决方案。 2016 年 8 月,公司在上海证券交易所成功上市。公司在中国北京、上海、深圳、合肥、西安、成都、苏州、香港和台湾,美国、韩国、日本、英国、新加坡等多个国家和地

这篇文章对你有价值吗?

  • 热门标签

热文

  • 3 天
  • 7天