IAsyncOpperation上的Visual C ++ WinRT create_task< Array<>> [英] Visual C++ WinRT create_task on IAsyncOpperation<Array<>>

查看:71
本文介绍了IAsyncOpperation上的Visual C ++ WinRT create_task< 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&lt; Array&lt;&gt;&gt;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆