VS2012,C#,XAML,Windows Phone7应用程序(刚刚从Win7 / VS2010迁移)。
我刚刚将我的WP7应用程序迁移到Win8 / VS2012。 (我提到这个以防下面的问题可能表明我可能指向一个不正确的DLL。)应用程序迁移得很好。我正在添加一些我在VS2012中制作原型的额外异步处理,并且我被VS标记为以下内容不正确:
var _Token = await Task.Run(() => (Token)_Serializer.ReadObject(_Response.GetResponseStream()));
VS说“System.Threading.Tasks.Task不包含'Run'的定义。”我的WP7应用程序中的System.Threading.Tasks参考指向此位置:\ packages \ Microsoft.Bcl.1.0.16-rc \ lib \ sl4-windowsphone71 \ System.Threading.Tasks.dll
我通过NuGet添加了Microsoft.Bcl.1.0.16-rc以完成向VS2012的迁移。这是不正确的?以前我使用的是AsyncCtpLibrary_Phone,并建议获取Microsoft.Bcl.Async可以解决构建错误,例如:
AsyncCtpLibrary_Phone.dll'>和'c:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ WindowsPhone \ v8.0 \ mscorlib.dll中存在'System.Threading.Tasks.Task'类型。 添加Microsoft.Bcl.Async后,wp7应用程序正确构建并运行。
只有在尝试删除我在VS2012中制作原型的新异步代码后,才会出现Task.Run问题。
app.config包含以下条目:
<dependentAssembly bcl:name="System.Threading.Tasks">
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.5.11.0" newVersion="1.5.11.0" />
</dependentAssembly>
我需要安装额外的软件包吗?
提前致谢, 保罗
答案 0 :(得分:15)
在Microsoft.Bcl.Async中,就像在异步CTP中一样,Run
方法位于TaskEx
类型而不是Task
。
答案 1 :(得分:0)
我最后一次检查时,Async CTP在Visual Studio 2012中不起作用,因为它是Visual Studio 2010的扩展。我担心只要您定位Windows,就必须坚持使用VS 2010电话7。
可能更有用的信息here。
答案 2 :(得分:0)
我认为问题是您仍然需要包含相同类型的旧异步CTP程序集(根据编译器错误)。这些是使用VS2010时的正确参考,但现在需要删除AFAICT。
恕我直言,我会做这些步骤:
我不明白WP7.1 vs 7.5,但由于编译器错误提到了WP8 ref,我认为你没问题。
答案 3 :(得分:-1)
NuGet的Microsoft.Bcl.Async dll很好。
问题在于语法不同。不要使用:
await Task.Run(() => ...);
你应该使用:
await Task.Factory.StartNew(() => ...);