web-dev-qa-db-ja.com

Xamarin.FormsでThread.Sleepを使用する

以下を実行したい

MainPage = new ContentPage
{
    Content = new StackLayout
    {
        Children =
        {
            new Button
            {
                Text = "Thread.Sleep",
                Command = new Command(() =>
                {
                    Thread.Sleep(1000);
                    MainPage.Animate("", x => MainPage.BackgroundColor = Color.FromRgb(x, x, x));
                }),
            },
            new Button
            {
                Text = "Task.Run + Thread.Sleep",
                Command = new Command(async () =>
                {
                    await Task.Run(() => Thread.Sleep(1000));
                    MainPage.Animate("", x => MainPage.BackgroundColor = Color.FromRgb(x, x, x));
                })
            },
            new Button
            {
                Text = "Device.StartTimer",
                Command = new Command(() => Device.StartTimer(
                    TimeSpan.FromSeconds(1),
                    () =>
                    {
                        MainPage.Animate("", x => MainPage.BackgroundColor = Color.FromRgb(x, x, x));
                        return false;
                    })),
            },
        }
    }
};

System.ThreadingSystem.Threading.Tasksを含めましたが、

「スレッド」という名前は現在のコンテキストに存在しません。

このサイト は、Thread.SleepXamarin.Formsで使用できることを示唆しています。これはPCLではなく共有プロジェクトにあります。

13
testing

待ちたい場合

非同期:await Task.Delay(10000);

同期的に:Task.Delay(10000).Wait();

ただし、UIスレッドをブロックしないようにして、優れたユーザーエクスペリエンスを確保し、アプリの応答性を維持してください。

Xamarin.FormsでThread.Sleepを使用

2つのXamarin.Formsテンプレートがあります。

  • Xamarin.Formsポータブルクラスライブラリ

    PCLサブセットメカニズムのため、Thread.Sleepを取得する機会はありません。

    2017年の更新: PCLは非推奨になりました。 .netstandard 2.0を使用している場合は、慣れているThread.Sleepを使用できます。

  • Xamarin.Forms共有プロジェクト

    このテンプレートには、Thread.Sleepをサポートしないさまざまなプラットフォームが含まれています。 Windows UWP、Xamarin.AndroidおよびXamarin.iOSはサポートしていますが、Windows Phone 8.1およびWindows 8.1はサポートしていません。 2つのプロジェクトをアンロード/削除すると、ソリューションがビルドされます。 (System.Threadingを使用することを忘れないでください。App.csで)

30

使用してみることができます

await Task.Delay(milliseconds);

スレッドに遅延を入れたい場合。

あなたができるブロッキングのために

Task.Delay(TimeSpan.FromSeconds(5)).Wait();
3
Rahul Tripathi