WEB开发网
开发学院软件开发C语言 浅谈如何使用Lambda表达式做抽象代表 阅读

浅谈如何使用Lambda表达式做抽象代表

 2009-04-30 08:27:33 来源:WEB开发网   
核心提示: MyTime.Dispatcher.Invoke(()=>DoSomething());会出现隐秘错误:errorCS1660:Cannotconvertlambdaexpressiontotype'System.Delegate'becauseitisnotadel

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 怎样简化与老式应用程序接口(下图)的运行。

浅谈如何使用Lambda表达式做抽象代表

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

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

更新应用程序

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

      MyTime.Background = newBrush; 
MyTime.Content = label

上一页  1 2 3 4  下一页

Tags:如何 使用 Lambda

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接