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

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

 2009-04-30 08:27:33 来源:WEB开发网   
核心提示: 计时器在背景线程上运行,所以你需要通过使用Dispatcher.Invoke()边界线执行调用,浅谈如何使用Lambda表达式做抽象代表(3),这两行代码是你想列入lambda表达式的代码,不是证明方法定义的逻辑理由,就必须使用Dispatcher.Invoke(),Dispatcher.

计时器在背景线程上运行,所以你需要通过使用Dispatcher.Invoke()边界线执行调用。这两行代码是你想列入lambda表达式的代码,不是证明方法定义的逻辑理由。但是我之前就讲过lambda不会与Didpatcher.Invoke一起运行,除非是你使用了具体的代表定义才行。这之中的一部分已经在.NET框架3.5中定义了。我们可以使用嵌入式代表定义并对它们进行分配,这些都是的该解决方案比起先前提到过的案例都要省事一些。这两行代码也要求一对参数:一个用于文本的字符串和用于背景颜色的颜色刷。这意味着你需要使用的代表定义要考虑到这两个参数并返回无效值:

Action updateTimer;

在声明变量后,你可以为代码指定需要执行的代表变量。这里你可以使用lambda表达式,因为Action是一个具体的代表定义:

updateTimer = (label, newBrush) => 
{
MyTime.Background = newBrush;
MyTime.Content = label;
};

现在,当计时器提出事件时,你已经拥有了一些需要执行的指向该代码的变量。接下来要做的就只是通过Dispatcher.Invoke()使用代表定义:

if (!MyTime.Dispatcher.CheckAccess()) 
{
MyTime.Dispatcher.Invoke(updateTimer,
newLabel, next);
}
else
updateTimer(newLabel, next);

这一过程十分简单,但是却要求你反复进行,因此,我们可以让步骤变得容易一点。

这里其实由一个简单的模式。事件处理器可以从背景线程中调用出来。当我们使用计时器,或者异步调用Web服务以及其他类似任务的时候,你就会看到这一行为。无论是在什么时候,我们都不清楚自己位于哪个线程之上,我们可以调用Dispatcher.CheckAccess()来决定是否可以访问任意用户界面控件。如果需要从线程边界执行调用,就必须使用Dispatcher.Invoke()。Dispatcher.Invoke()方法避免了由于使用了方法参数的参数数组而造成的若干超载问题。它使用的是一个我们想要执行的抽象代表类型。

上一页  1 2 3 4  下一页

Tags:如何 使用 Lambda

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