Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
54
Programowanieasynchroniczne
Listing2.13.Zgłoszenieżądaniaprzerwaniaobliczeńrealizowanychwtle,konfguracjapola
typuCancellationTokenorazwizualnegostanukontrolek
privatevoidButtonCancel_Click(objectsender,RoutedEventArgse)
{
cancellationTokenSource.Cancel();
SetCalculationState(false);
}
privatevoidPrepareCancellationTokenSource()
{
if(cancellationTokenSource!=null)
{
cancellationTokenSource.Dispose();
}
cancellationTokenSource=newCancellationTokenSource();
}
privatevoidSetCalculationState(boolisCalculationActive)
{
ButtonCancel.IsEnabled=isCalculationActive;
ButtonCalculatePi.IsEnabled=!isCalculationActive;
ProgressBarCalculatePi.IsIndeterminate=isCalculationActive;
ProgressBarCalculatePi.Visibility=isCalculationActive?
Visibility.Visible:Visibility.Collapsed;
}
Listing2.14.KonstruktorklasyMainPage
publicMainPage()
{
InitializeComponent();
stopwatch=newStopwatch();
synchronizationContext=SynchronizationContext.Current;
SetCalculationState(false);
}
Listing2.15.Jeśliobliczeniazostanąprzerwane,tozamiastwynikuwyświetlanybędziekomu-
nikatotreściObliczeniazostałyprzerwane
privatestringPrepareResult(longpointsCount,
doubleestimatedValue)
{
stringresult=string.Empty;
if(!cancellationTokenSource.IsCancellationRequested)