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();
}
}