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. tasks ."任务不包含'运行'的定义。"我的WP7应用程序中的System.Threading.Tasks参考指向此位置:packagesMicrosoft.Bcl.1.0.16-rclibsl4- windowphone71 System.Threading.Tasks.dll
我添加了Microsoft.Bcl.1.0.16-rc通过NuGet完成迁移到VS2012。这是错的吗?以前我使用AsyncCtpLibrary_Phone,并被建议获得Microsoft.Bcl.Async将解决构建错误,如:
类型为"System.Threading.Tasks"。任务'存在于AsyncCtpLibrary_Phone.dll'>和'c:Program Files (x86)Reference AssembliesMicrosoftFrameworkWindowsPhonev8.0mscorlib.dll '中。添加Microsoft.Bcl.Async后,wp7应用程序正确构建并运行。
只是在尝试删除我在VS2012中原型化的NEW async代码之后,Task。出现运行问题。
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>
是否有额外的软件包需要我安装?
提前感谢,保罗
In Microsoft.Bcl。异步,就像在异步CTP中一样,Run
方法是TaskEx
类型而不是Task
。
上次我检查的时候,异步CTP在Visual Studio 2012中不起作用,因为它是Visual Studio 2010的扩展。我担心你必须坚持VS 2010,只要你的目标是Windows Phone 7。
这里可能有更多有用的信息。
我认为问题是你仍然需要引用旧的异步CTP程序集,其中包括相同的类型(根据编译器错误)。当使用VS2010时,这些是正确的引用,但现在需要删除AFAICT。
恕我直言,我会做这些步骤:
- 删除Microsoft。Bcl和Microsoft.Bcl.Async(通过NuGet,无论你添加它们)
- 删除异步CTP库(asyncctlibrary *.dll)
- 确保编译失败找到类型 添加Microsoft.Bcl.Async
- 确保编译工作
我不明白WP7.1 vs 7.5,但由于编译器错误提到WP8参考,我认为你是好的。
NuGet中的Microsoft.Bcl.Async dll可以。
问题在于语法不同。不要使用:
await Task.Run(() => ...);
你应该使用:
await Task.Factory.StartNew(() => ...);