如何一次执行两项任务

时间:2018-09-10 14:50:55

标签: c# xamarin xamarin.forms xamarin.android

我有一张正面和背面为图像格式的卡片,我打算同时显示两面,并且在几秒钟的时间内创建了一个带有线程的方法来显示每一面。问题在于它只显示一侧,而我希望在至少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();

1 个答案:

答案 0 :(得分:-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