我正在尝试制作一个简单的程序来测试Visual Studio 2012中新的.NET异步功能.我通常使用BackgroundWorkers来异步运行耗时的代码,但有时候看起来像是一个相对简单(但很昂贵)操作的麻烦.新的异步修改器看起来很好用,但不幸的是我似乎无法进行简单的测试.
这是我在C#控制台应用程序中的代码:
static void Main(string[] args)
{
string MarsResponse = await QueryRover();
Console.WriteLine("Waiting for response from Mars...");
Console.WriteLine(MarsResponse);
Console.Read();
}
public static async Task<string> QueryRover()
{
await Task.Delay(5000);
return "Doin' good!";
}
Run Code Online (Sandbox Code Playgroud)
我在MSDN上查看了一些示例,它看起来像我的代码应该正常工作,但我在包含"await QueryRover();"的行上遇到了构建错误.我疯了还是发生了什么?
我试图在Windows通用应用程序中使用串行端口.我一直在使用Microsoft的Serial Sample应用程序作为模板,但是我遇到了一个相当奇怪的问题.
var dis = await DeviceInformation.FindAllAsync(SerialDevice.GetDeviceSelectorFromUsbVidPid(0x04D8, 0x000A));
var sp = await SerialDevice.FromIdAsync(dis[0].Id);
Run Code Online (Sandbox Code Playgroud)
这是一个失败的片段.它与原始样本略有不同,因为它连接到具有特定供应商的第一个设备.现在,如果我把这个片段放在Microsoft生成的示例应用程序中,串口就打开了,一切都很好.但是,当我将此代码移动到我自己的项目中时,它总是null从方法返回.
以下是MainPage.xaml.csMicrosoft示例中的完整版本:我的
工作!
// Copyright (c) Microsoft. All rights reserved.
using System;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Linq;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.Devices.Enumeration;
using Windows.Devices.SerialCommunication;
using Windows.Storage.Streams;
using System.Threading;
using System.Threading.Tasks;
namespace SerialSample
{
public sealed partial class MainPage : Page
{
/// <summary>
/// Private variables
/// </summary>
private SerialDevice serialPort = null;
DataWriter dataWriteObject = null;
DataReader dataReaderObject = null; …Run Code Online (Sandbox Code Playgroud)