jb

jb


namespace Minich;


public partial class Progress : ContentPage

{

  CancellationTokenSource cancelTokenSource;

  CancellationToken token;

  public Progress()

  {

    InitializeComponent();

    cancelTokenSource = new CancellationTokenSource();

    token = cancelTokenSource.Token;

  }

  private async void IntegralButton(object sender, EventArgs e)

  {

    if(cancelTokenSource.IsCancellationRequested || cancelTokenSource == null) 

    {

      cancelTokenSource = new CancellationTokenSource();

      token = cancelTokenSource.Token;

    }

    ProgressLine.Progress = 0;

    ProgressText.Text = "0%";

    await Task.Run(()=>CalculateIntegral());

     

  }

  private async Task CalculateIntegral()

  {

    double result = 0.0;

    double step = 0.01;

    MainThread.InvokeOnMainThreadAsync(()=>Result.Text = "Вычисление");

    try

    {

      for (double i = 0; i <= 1; i += step)

      {

        if (token.IsCancellationRequested)

        {

          Result.Text = "Задание отменено";

          return;

        }

        result += step * Math.Sin(i);

        /*for (int j = 0; j < 100; j++)

        {

          j *= 1;

        }*/

        await Task.Delay(100);

        MainThread.InvokeOnMainThreadAsync(()=>ProgressLine.Progress = i);

        MainThread.InvokeOnMainThreadAsync(()=>ProgressText.Text = $"{Convert.ToInt16(i * 100)}%");

      }

      MainThread.InvokeOnMainThreadAsync(()=>Result.Text = $"Результат: {result}");

    } catch (Exception ex)

    {


    }

     

  }


  private void CancelButton(object sender, EventArgs e)

  {

    cancelTokenSource.Cancel();

  }

}

Report Page