IAsyncOpperation上的Visual C ++ WinRT create_task< Array<>> [英] Visual C++ WinRT create_task on IAsyncOpperation<Array<>>
问题描述
我正在创建一个IAsyncAction< Array< unsigned char> ^>通过create_async函数。 然后,当我接受opperation的结果并将其放入create_task块时,我得到编译器错误。 任何人都知道为什么会发生这种情况。
如果我的create_async函数只返回一个unsigned char,那么就没有问题了。
I am creating an IAsyncAction<Array<unsigned char>^> via the create_async function. When I then take the result of the opperation and put it into a create_task block I get a compiler error. Anyone have any ideas why this occurs. If my create_async function returns just a single unsigned char, then there is not an issue.
这是我的代码:
Array<unsigned char>^ arr;
auto opp = create_async([this]() -> Array<unsigned char>^
{
Array<unsigned char>^ a = ref new Array<unsigned char>(30);
return a;
});
create_task(opp);
这是我得到的编译器错误:
Here is the compiler error I get:
:\program files(x86)\ microsoft visual studio 11.0\vc\include\ppltasks.h(3540):error C2664:'void Concurrency :: task< _ReturnType> :: _ TaskInitNoFunctor(Concurrency: :task_completion_event< _ResultType>&)':无法从'Concurrency :: details :: _ AsyncTaskGeneratorThunk< _Function>转换参数1
'到'Concurrency :: task_completion_event< _ResultType> &'
1> 与
1> [
1> _ReturnType = Platform :: Array< unsigned char,1> ^,b
1> _ResultType = Platform :: Array< unsigned char,1> ^
$
1> ]¥b $ b 1> 和$
1> [
1> _Function = method ::< lambda_6bb4ca4120feca3477b5068449426141>
1> ]¥b $ b 1> 和$
1> [
1> _ResultType = Platform :: Array< unsigned char,1> ^
$
1> ]¥b $ b 1> c:\program files(x86)\ microsoft visual studio 11.0\vc\include\ppltasks.h(2717):参见函数模板实例化'void Concurrency :: task< _ReturnType> :: _ TaskInitMaybeFunctor< _Ty> ;(_ Ty
&,std :: false_type)'正在编译
1> 与
1> [
1> _ReturnType = Platform :: Array< unsigned char,1> ^,b
1> _Ty =并发::细节:: _ AsyncTaskGeneratorThunk<方法&:: LT; lambda_6bb4ca4120feca3477b5068449426141>> ^
$
1> ]¥b $ b 1> c:\program files(x86)\ microsoft visual studio 11.0\vc\include\ppltasks.h(4215):参见函数模板实例化'Concurrency :: task< _ReturnType> :: task< _Ty> (_Ty)'为
编译为
1> 与
1> [
1> _ReturnType = Platform :: Array< unsigned char,1> ^,b
1> _Ty =并发::细节:: _ AsyncTaskGeneratorThunk<方法&:: LT; lambda_6bb4ca4120feca3477b5068449426141>> ^
$
1> ]¥b $ b 1> c:\a.cpp(143):参见函数模板实例化'Concurrency :: task< _ReturnType> Concurrency :: create_task< Concurrency :: details :: _ AsyncTaskGeneratorThunk< _Function> ^>(_ Ty)'
正在编译
1> &NBSP;&NBSP;&NBSP;与
1> [
1> _ReturnType = Platform :: Array< unsigned char,1> ^,b
1> _Function = method ::< lambda_6bb4ca4120feca3477b5068449426141>,
1> _Ty =并发::细节:: _ AsyncTaskGeneratorThunk<方法&:: LT; lambda_6bb4ca4120feca3477b5068449426141>> ^
$
1> ]
:\program files (x86)\microsoft visual studio 11.0\vc\include\ppltasks.h(3540): error C2664: 'void Concurrency::task<_ReturnType>::_TaskInitNoFunctor(Concurrency::task_completion_event<_ResultType> &)' : cannot convert parameter 1 from 'Concurrency::details::_AsyncTaskGeneratorThunk<_Function>
' to 'Concurrency::task_completion_event<_ResultType> &'
1> with
1> [
1> _ReturnType=Platform::Array<unsigned char,1> ^,
1> _ResultType=Platform::Array<unsigned char,1> ^
1> ]
1> and
1> [
1> _Function=method::<lambda_6bb4ca4120feca3477b5068449426141>
1> ]
1> and
1> [
1> _ResultType=Platform::Array<unsigned char,1> ^
1> ]
1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\ppltasks.h(2717) : see reference to function template instantiation 'void Concurrency::task<_ReturnType>::_TaskInitMaybeFunctor<_Ty>(_Ty
&,std::false_type)' being compiled
1> with
1> [
1> _ReturnType=Platform::Array<unsigned char,1> ^,
1> _Ty=Concurrency::details::_AsyncTaskGeneratorThunk<method::<lambda_6bb4ca4120feca3477b5068449426141>> ^
1> ]
1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\ppltasks.h(4215) : see reference to function template instantiation 'Concurrency::task<_ReturnType>::task<_Ty>(_Ty)' being
compiled
1> with
1> [
1> _ReturnType=Platform::Array<unsigned char,1> ^,
1> _Ty=Concurrency::details::_AsyncTaskGeneratorThunk<method::<lambda_6bb4ca4120feca3477b5068449426141>> ^
1> ]
1> c:\a.cpp(143) : see reference to function template instantiation 'Concurrency::task<_ReturnType> Concurrency::create_task<Concurrency::details::_AsyncTaskGeneratorThunk<_Function>^>(_Ty)'
being compiled
1> with
1> [
1> _ReturnType=Platform::Array<unsigned char,1> ^,
1> _Function=method::<lambda_6bb4ca4120feca3477b5068449426141>,
1> _Ty=Concurrency::details::_AsyncTaskGeneratorThunk<method::<lambda_6bb4ca4120feca3477b5068449426141>> ^
1> ]
推荐答案
嗨Michael,
Hi Michael,
因此,从 create_async 的文档中,返回值应为
之一
以下: -
So, from the documentation of create_async the return value should be one of
the following :-
IAsyncAction ^
IAsyncAction^
IAsyncActionWithProgress< TProgress> ^
IAsyncActionWithProgress<TProgress>^
IAsyncOperation< TResult> ^
IAsyncOperation<TResult>^
IAsyncOperationWithProgress< TResult,TProgress> ^
IAsyncOperationWithProgress<TResult, TProgress>^
从任务的定义,任务是返回未在上面列出的Array< unsigned char> ^。因此,我们需要使用Array< unsigned char> ^代替其中一个< TResult>以上。
From thedefinition of the task, the task was returning Array<unsigned char>^ which is not listed above. So, we need to have Array<unsigned char>^ in place of one of the <TResult> above.
因此代码应为: -
Hence the code should be :-
//定义: -
IAsyncOperation< Array< unsigned char> ^> ^
GetArrayAsync()
{
  ;返回create_async([this](){
return
getArray();
});
}
数组< unsigned char> ^ getArray()
{
数组< unsigned char> ^ a
= ref new Array< unsigned char>(30);
返回a;
}
//如何调用: -
IAsyncOperation< Array< unsigned char> ^> ^ operation =
GetArrayAsync( );
IAsyncOperation<Array<unsigned char>^>^ operation =
GetArrayAsync();
操作 - >已完成= ref new
AsyncOperationCompletedHandler< Array< unsigned
char> ^>([=](IAsyncOperation< ;数组< unsigned char> ^> ^
结果,AsyncStatus stat)
{
//在此处对结果进行操作
});
-Sagar
这篇关于IAsyncOpperation上的Visual C ++ WinRT create_task< Array<>>的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!