问题标签 [iasyncoperation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1089 浏览

windows-runtime - WinRT C++/CX 任务未编译

我正在尝试使用 C++/CX 创建 WinRT 组件。我有以下代码,但无法编译。它有什么问题?据我了解,PPL 任务应该透明地转换为 IAsyncOperation 如果它是一个有结果的任务。

错误信息

0 投票
1 回答
1960 浏览

c# - 如何在 IInputStream 接口中包装 Windows.Storage.Streams.IInputStream?

我想实现一个 IInputStream ,它委托给另一个 IInputStream 并在将读取的数据返回给用户之前对其进行处理,如下所示:

我有两个不同的问题,我无法通过搜索浩瀚的互联网来回答:

  • 在委派的 ReadAsync() 之后链接另一个操作以运行的最佳方法是什么(我可以使用“等待”,也可以使用 AsyncInfo 创建一个新的 IAsyncOperation,但我不知道如何连接进度报告器等)
  • 如何访问“IBuffer”背后的数据?
0 投票
2 回答
1371 浏览

multithreading - 使用 WinJS 中的多线程 WinRT 组件

我有一个使用 C++/CX 编写的 WinRT 组件的 WinJS 应用程序。组件生成一个后台线程,该线程使用一个庞大的遗留线程不安全 C++ 库来封装工作,这要求所有调用都来自同一个线程。

我需要实现一个生产者/消费者模式,其中组件中的后台线程是生产者,而 JavaScript 应用程序中的 UI 线程是消费者。

调用部分很简单,因为 JavaScript 可以调用组件方法(在 UI 线程中),而 C++ 代码会将作业发布到后台线程的队列中。

问题是回调:我需要将 C++ 后台线程计算的数据发布到 UI 线程中。我当然可以将 IAsyncOperation 返回给 JavaScript,但我不希望 UI 线程在此操作等待来自后台线程的事件时被阻塞。

我有哪些选择?

0 投票
1 回答
225 浏览

c# - 获取多线程以在网页和业务层之间进行同步

我在让这段代码工作时遇到问题(对不起,长度)。代码经过消毒,仅显示诊断问题的相关部分。

从控制台应用程序运行时它工作正常。但是,当从 ASP.NET 应用程序调用 Utlities.SendBulkEmail 时,BulkEmailCompleted例程永远不会触发,并且正是这个例程增加了 m_CompletedWorkers 计数器。

如何重构 SendBulkEmail 例程以使用 AsyncOperationManager 而不是 BackgroundWorker,因此我可以保证返回结果的线程。

SendBulkEmail 例程本身不是多线程的。多线程发生在其 foreach 循环内。

我认为原始代码的基础是从这个网站获得的:http: //www.dotnetfunda.com/articles/article613-background-processes-in-asp-net-web-applications.aspx

Utilities 项目在各种解决方案之间共享,并且几乎是独立的。

我希望我能说清楚。

任何帮助将不胜感激。

代码如下:

在网站项目中 (Control.ascx.cs)

在业务对象项目中

在公用事业项目中

0 投票
0 回答
133 浏览

c# - 使用泛型方法实例化 SendOrPostCallback 委托实例时可能出现的性能问题

在使用 AsyncOperation 将我的事件编组到 UI 上下文之后,我必须创建我的 OnEventName 方法到 OnEventNameAsync 版本的副本。我惊讶地发现我可以用以下两种方法替换我的所有 OnEventName 方法:

通过调用引发事件:

this.OnRaiseEvent(this.EventName, this, EventArgs.Empty);

现在,每次我的应用程序引发事件时,我的应用程序都必须创建一个 SendOrPostCallback 委托的新实例,而且有很多。我的问题是,如果我保持这种设计模型,这是否会导致性能问题?在测试中,我没有注意到性能有任何下降,但想问问专家......

0 投票
0 回答
247 浏览

c++ - IAsync 操作^

我正在尝试创建一个 C++ 运行时组件以在 c# windows store app 项目中使用;

我创建了一个新项目 C++ -> Windows Store App -> Windows 运行时组件。新项目具有默认类 1。

这是我试图做的,我得到错误:

类1.h:

Class1.cpp:

错误

错误 2 错误 LNK2019:未解析的外部符号“公共:虚拟结构 Windows::Foundation::IAsyncOperation ^ cdecl TestRuntimeC_ toCS::Class1::[TestRuntimeC _toCS::_ IClass1PublicNonVirtuals]::LoadImage(struct Windows::Storage::Streams: :IRandomAccessStream ^)" (?LoadImage@?Q _IClass1PublicNonVirtuals@TestRuntimeC__toCS@@Class1@2@U$AAAP$AAU?$IAsyncOperation@P$AAVBitmapImage@Imaging@Media@Xaml@UI@Windows@@@Foundation@Windows@@ P$AAUIRandomAccessStream@Streams@Storage@6@@Z) 在函数“public: virtual long _ stdcall TestRuntimeC _toCS::Class1::[TestRuntimeC_ toCS:: _IClass1PublicNonVirtuals]::__abi_TestRuntimeC__toCS IClass1PublicNonVirtuals中引用_abi_LoadImage(struct Windows::Storage::Streams::IRandomAccessStream ^,struct Windows::Foundation::IAsyncOperation ^ *)" (?__abi_TestRuntimeC__toCS IClass1PublicNonVirtuals ___abi_LoadImage@?Q_ IClass1PublicNonVirtuals@TestRuntimeC _toCS@@Class1@2@U$AAGJP$AAUIRandomAccessStream @Streams@Storage@Windows@@PAP$AAU?$IAsyncOperation@P$AAVBitmapImage@Imaging@Media@Xaml@UI@Windows@@@Foundation@7@@Z) C:\Users\Stamatis\Documents\Visual Studio 2013 \Projects\TestRuntimeC++toCS\TestRuntimeC++toCS\Class1.obj TestRuntimeC++toCS

0 投票
1 回答
215 浏览

f# - 在 F# 中等待 IAsyncOperation

我在 F# 中有以下代码:

我遇到的问题file是 aIAsyncOperation<StorageFile>而不是 a预期的StorageFile那样。ReadTextAsync

在 C# 中,您可以执行类似的操作:

IE

问题是我不知道如何IAsyncOperation在 F# 中等待。常规的let!不行。即以下无法编译:

随着编译器错误:

我发现一个文档说AsTask()在类中定义了一个扩展方法System.WindowsRuntimeSystemExtensions,我可以使用如下:

有没有一种标准的方法来做到这一点,或者某个地方的 F# 库中可用的东西让它变得更好一些?

0 投票
1 回答
733 浏览

c++ - WinRT c ++中的BitmapImage SetSourceAsync

我是 WinRT c++ 的新手。我正在尝试从 C# 传递 StorageFile 图像并打开文件并将其设置为 WinRT 中 BitmapImage 中的源以提取图像的高度和宽度。我正在使用以下代码。

此代码似乎不起作用。在 BitmapImage^ bmp = ref new BitmapImage(); 之后 调试器停止说没有找到源代码。你能帮我写出正确的代码吗?

0 投票
1 回答
265 浏览

c# - IAsync 操作不铸造

我有这个类CustomFileStream,下面是它的签名

但是当我这样使用它时,

我得到一个编译错误,

有人可以看看我是否在这里做错了什么。

谢谢。

0 投票
0 回答
231 浏览

c++ - C++ 无法使 Async DragDrop 正常运行

我们目前的系统有一个 Silverlight UI(我们现阶段无法更改),它的拖放功能非常有限。我们目前的浏览器信任度提高了。因此,为了处理 Silverlight 的缺点,我创建了一个 c++ com 库来处理拖放事件。这对于来自其他应用程序的传入事件非常有效,但是我正在努力以我们的应用程序为源来获得拖动操作,使其正常工作。要从应用程序中拖动的大多数文件都是虚拟的,我已经设法开始工作,但是无论我尝试过什么,我都无法使操作异步,并且应用程序在此过程中锁定。

我最初只实现了 IAsyncOperation(需要向后兼容 xp),它没有明显的影响。我的 DataObject 被查询接口,获取 ref。调用 GetAsyncMode,返回 VARIANT_TRUE,然后调用 StartOperation。但是,所有操作都在同一个线程(ui 线程)上完成,并且似乎没有异步受到影响。

我随后尝试实现 ICallFactory 以返回 AsyncIDataObject。这里 explorer 似乎检查了 ICallFactory 接口,在调用对象上调用 CreateCall 并查询它以确保它具有正确的接口。使用符号服务器,我可以看到它发生在 AsyncStubInvoke 调用堆栈中。从这里调用 StdStubBuffer_QueryInterface 正在搜索 ICallFactory 接口。这个检查失败了,很遗憾我看不到这个接口正在检查什么对象。在此失败后,调用似乎在操作不支持错误(继接口不支持错误之后)后回退到 SyncStubInvoke。所有这些似乎也对最终结果没有影响,并且调用显然仍然与源应用程序锁定同步。

公开 com 调用的 DragDrop 类是 CComMultiThreadModel。我尝试使用我的 DataObject 作为不从 CComObjectRootEx 继承的基本类和在 IDL 中定义的包装器 IDataObject 类,并且确实从 CComObjectRootEx 继承,CComMultiThreadModel 也是如此。我也尝试过让这个类从 IDispatch 和 IUnknown 继承。

任何反馈将不胜感激。