gpt4 book ai didi

c# - .net compact framework 不支持异步调用委托(delegate)

转载 作者:行者123 更新时间:2023-11-30 20:04:23 25 4
gpt4 key购买 nike

我最近开始使用 window phone 7。我创建了一个委托(delegate)并尝试异步调用它。代码是这样的:

public class1
{
public delegate void fireAlwaysDelegate();
fireAlwaysDelegate fad;
public class1()
{
initializeComponents();
fad=new fireAlwaysDelegate(fireAlways)
}

fireAlways()
{
//some code
}

PhoneApplicationPage_loaded()
{
//some code
fda.beginInvoke(null,null);
}
}

但是,当我执行这段代码时,它抛出了一个异常,说 .net 紧凑框架不支持异步调用委托(delegate)。根据我对 WP7 框架的理解,它对几乎所有内容都使用异步调用,所以我无法理解为什么不允许这样做。

任何解决这个问题的方法。

我想在 PhoneApplicationPage_loaded 完成并启动 UI 后执行一些代码,我想从 PhoneApplicationPage_loaded 调用异步委托(delegate)。

另外我想了解为什么不允许对委托(delegate)进行异步调用。

最佳答案

在线程池线程上调用委托(delegate)目标的能力对于委托(delegate)来说有点奇怪。它属于“很高兴拥有”类别,但对于在 TP 线程上运行代码并不是必不可少的。它的实际实现类似于冰山,需要大量代码才能在另一个线程上构建具有任意参数的堆栈框架、管理它们的生命周期、捕获执行结果并将它们编码回调用线程。

该代码是 CLR Remoting 支持代码。并且在从 Compact Framework 开始并演变成 Silverlight 和 Windows Phone 的 CLR 分支中缺失。大小很重要的平台,为了保持小而被削减。将 Silverlight 的约 5 兆字节与桌面的约 50 兆字节进行比较,这是一个了不起的壮举。

另一种方法是改用 ThreadPool.QueueUserWorkItem()。它在您可以传递的参数中受到限制,可以通过使用 lambda 表达式捕获它们轻松解决。唯一需要担心的是异常,它们会在工作线程上引发,如果您没有在那里捕获它们,它们将终止您的应用程序。

关于c# - .net compact framework 不支持异步调用委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13017265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com