在 Xamarin.Forms 中使用 Thread.Sleep

本文关键字:Thread Sleep Xamarin Forms | 更新日期: 2023-09-27 18:37:13

我想执行以下内容

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.Sleep可用于Xamarin.Forms。我在共享项目中有这个,而不是 PCL。

在 Xamarin.Forms 中使用 Thread.Sleep

如果你想等待

异步:await Task.Delay(10000);

同步:Task.Delay(10000).Wait();

但请尽量避免阻塞 UI 线程,以确保良好的用户体验并保持应用响应。

在 Xamarin.Forms 中使用 Thread.Sleep

有两个 Xamarin.Forms 模板:

  • Xamarin.Forms 可移植类库

    由于 PCL 子集机制,您没有机会获得Thread.Sleep

    2017 年更新:PCL 现已弃用。如果使用 .netstandard 2.0,则可以像习惯一样使用Thread.Sleep

  • Xamarin.Forms Shared Project

    此模板包含不支持Thread.Sleep的不同平台。Windows UWP,Xamarin.Android和Xamarin.iOS支持它,Windows Phone 8.1和Windows 8.1不支持。如果卸载/删除 2 个项目,则会生成解决方案。(不要忘记使用System.Threading;在你的应用程序中.cs)

你可以尝试使用

await Task.Delay(milliseconds);

如果你想在你的线程中放置延迟。

对于阻止,您可以做

Task.Delay(TimeSpan.FromSeconds(5)).Wait();