Как выполнить две задачи одновременно - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть карта в формате изображения с лицевой и оборотной сторонами, я намереваюсь показать обе стороны, и я создал метод с резьбой в течение нескольких секунд, чтобы показать каждую сторону. Проблема в том, что он просто показывает одну сторону, и я хочу видеть обе стороны в течение минимум 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 голосов
/ 10 сентября 2018

Прежде всего, избегайте непосредственного использования 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 необходимо, чтобы это изменение было сделано в потоке пользовательского интерфейса.

Вы можете позвонить, используя Task.Run(this.FlipImagesAsync());

Е.И.В.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...