- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Metro 模式下实现线程,我在谷歌搜索时得到了这个例子,但我不明白 CallbackContext
。这有什么用? This解释了它在 MTA 中的用途,但我不清楚。当我将 CallbackContext
用作 Any
或 Same
时,我遇到了问题。有些东西只对一个有效,对另一个无效!所以首先我想知道这有什么用?! PS:我也是 WindowsRT 编程和 C++ 的新手!谢谢!
auto workItemHandler = ref new WorkItemHandler([=](IAsyncAction^)
{
// Run the user callback.
try
{
func(data);
}
catch (...)
{
}
// Signal that the thread has completed.
SetEvent(completionEvent);
//CloseHandle(completionEvent);
}, CallbackContext::Same);
最佳答案
CallbackContext
确定您的委托(delegate)(在本例中为 WorkItemHandler
)是否聚合自由线程编码器。这将确定您的委托(delegate)是否可以被偷运到另一个公寓(CallbackContext::Any
),或者是否必须将其回调到原始公寓(CallbackContext::Same
) .基本上,它告诉调用您的委托(delegate)的人是否可以直接调用它而不考虑公寓,或者他们是否需要编码回创建它的公寓。
例如,在 Windows 应用商店应用程序中,任何修改 UI 的内容都需要在 UI 线程 (STA) 上运行。假设您所在的方法是在 UI 线程上运行的方法(例如事件回调,如按钮单击处理程序)。某些异步调用,如 ThreadPool::RunAsync
将在 UI 线程以外的线程上运行传入的委托(delegate)(因为委托(delegate)的默认值是 CallbackContext::任何
)。如果您不需要在 UI 线程上执行任何操作,这将非常有用,因为它可以释放该线程以继续发送消息(并且您的应用程序会继续保持高性能)。
但是,如果您确实需要修改 UI 或对 UI 进行回调,并且您尝试从非 UI 线程执行此操作,则会收到不正确的线程异常。通过添加参数 CallbackContext::Same
,您可以强制您的委托(delegate)在原始单元(在本例中为 STA)中运行,从而避免该问题。
(您还可以通过使用 Dispatcher->RunAsync
调用另一个委托(delegate)在 STA 上运行来回调 UI 线程。整个委托(delegate)在 STA 上运行是否更好STA与否取决于你的场景。)
关于c++ - 委托(delegate)和线程 : CallbackContext parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11887343/
我正在使用新的输入系统并调用 Unity 事件将输入传递给我的 bevaviour 脚本。这是显示通过输入进行简单移动的示例代码 public class MovementBehaviour : Mo
我有一个使用名为“com.hyipc.core.service.barcode.BarcodeService2D”的服务扫描条形码的 Cordova 插件。这是通过向广播接收器注册接收器来完成的。 扫
我在 Metro 模式下实现线程,我在谷歌搜索时得到了这个例子,但我不明白 CallbackContext 。这有什么用? This解释了它在 MTA 中的用途,但我不清楚。当我将 CallbackC
我正在尝试更新在 github 上找到的一个尚未更新的插件 (AdMob) https://github.com/rajpara11/phonegap-plugins/blob/master/Andr
我是一名优秀的程序员,十分优秀!