-2

我正在编写一个小程序来使用 Monobrick.dk 中的 monobrick C# 库来控制 LEGO Mindstorms汽车。我已经在 Windows 窗体中使用了该库并且它有效。我听说窗体是编写 Windows 应用程序的过时方式,所以我想切换到 Windows 通用平台。我做了一个类似于工作代码的小代码,但出现错误:

命名空间“System.Threading”中不存在类型或命名空间名称“Thread”(您是否缺少程序集引用?) App1 \App1\MainPage.xaml.cs 37

这是“System.Threading.Thread”表单中的奇怪原因。

这是代码。它应该以一半的功率转动电机 A 3 秒。按下屏幕按钮后。

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Runtime.InteropServices.WindowsRuntime;
    using Windows.Foundation;
    using Windows.Foundation.Collections;
    using Windows.UI.Xaml;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Controls.Primitives;
    using Windows.UI.Xaml.Data;
    using Windows.UI.Xaml.Input;
    using Windows.UI.Xaml.Media;
    using Windows.UI.Xaml.Navigation;
    using MonoBrick.EV3;

    namespace App1
    {
public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();

        }

    private void button_Click(object sender, RoutedEventArgs e)
    {
        var ev3 = new Brick<Sensor, Sensor, Sensor, Sensor>("wifi");
        ev3.Connection.Open();
        ev3.MotorA.On(50);
        System.Threading.Thread.Sleep(3000);
        ev3.MotorA.Off();
           }
        }
    }

我在这里想念什么?WUP 对初学者来说是不是有点矫枉过正?也许我应该坚持 WPF?

将不胜感激您的建议。

4

1 回答 1

0

System.Threading.Thread 已从 Windows 运行时(为通用 Windows 平台提供支持)中删除。相反,Microsoft 希望您专注于异步编程模式,而不是直接使用 Thread 类(请参阅此页面以获取异步编程模式文档)。

正如在这个问题中回答的那样,您应该使用该Task.Delay方法,因此您的代码将变成以下几行:

private async void button_Click(object sender, RoutedEventArgs e)
{
    // code before
    await Task.Delay(3000);
    // code after
}

这有一个额外的好处,即您的 UI 不会变得无响应,因为Thread.Sleep如果它没有在另一个线程或异步调用中执行,该方法将冻结 UI 线程。

您可能还想阅读这篇关于 C# 和 VB.NET 中的异步编程的文章

于 2015-11-28T22:46:15.913 回答