-2

Monobrick.dk のmonobrick C# ライブラリを使用して LEGO Mindstorms 車を制御する小さなプログラムを作成しています。Windows フォームでライブラリを使用しましたが、機能しました。フォームは Windows アプリの作成方法としては時代遅れだと聞いたので、Windows ユニバーサル プラットフォームに切り替えたいと考えています。作業中のコードに似た小さなコードを作成しましたが、エラーが発生します:

型または名前空間名「Thread」が名前空間「System.Threading」に存在しません (アセンブリ参照がありませんか?) App1 \App1\MainPage.xaml.cs 37

Forms「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
}

Thread.Sleepこれには、別のスレッドまたは非同期呼び出しで実行されなかった場合にメソッドが UI スレッドをフリーズするため、UI が応答しなくなるという追加の利点があります。

C# と VB.NET での非同期プログラミングに関するこの記事もお読みください。

于 2015-11-28T22:46:15.913 に答える