如何一次执行两个任务

问题描述 投票:0回答:1

我有一张带有正面和背面的图像格式的卡片,我打算显示两面,我创建了一个带有线程的方法,在几秒钟内显示每一面。问题是它只是显示一侧,我希望在最少5秒内看到两侧

        Thread t1 = new Thread(() =>
        {
            int numberOfSeconds = 0;
            while (numberOfSeconds < 5)
            {
                Thread.Sleep(10);

                numberOfSeconds++;
            }

       ImgCCF.Source = ImageSource.FromResource("Agtmovel.Img.cartFront.png");

        });

        Thread t2 = new Thread(() =>
        {
            int numberOfSeconds = 0;
            while (numberOfSeconds < 8)
            {
                Thread.Sleep(10);

                numberOfSeconds++;
            }


            ImgCCF.Source = ImageSource.FromResource("Agtmovel.Img.cartBack.png");

        });
        t1.Start();
        t2.Start();

        //t1.Join();
        //t2.Join();
c# xamarin xamarin.forms xamarin.android
1个回答
-1
投票

首先避免直接使用Thread并使用Task代替。它们更易于使用,并且更好地处理线程。

所以你可以这样做:

private async Task FlipImagesAsync()
{
    while (true)
    {
        await Task.Delay(5000); // I'm not entirely sure about the amount of seconds you want to wait here

        Device.BeginInvokeOnMainThread(() =>
        {
            ImgCCF.Source = ImageSource.FromResource("Agtmovel.Img.cartFront.png");
            ImgCCF.IsVisible = true;
            ImgCCV.IsVisible = false;
        });

        await Task.Delay(8000); // I'm not entirely sure about the amount of seconds you want to wait here

        Device.BeginInvokeOnMainThread(() =>
        {
            ImgCCV.Source = ImageSource.FromResource("Agtmovel.Img.cartBack.png");
            ImgCCV.IsVisible = true;
            ImgCCF.IsVisible = false;
        });
    }
}

Device.BeginInvokeOnMainThread是必要的,以便在UI线程上完成更改。

你可以使用Task.Run(this.FlipImagesAsync());来调用它

HIH

© www.soinside.com 2019 - 2024. All rights reserved.