Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
2050Przerywaniedziałaniawątkówroboczych
53
2.PrzejdźdoedycjiplikuMonteCarlo.csizmodyfkujwnimdefnicjęmetody
EstimatePi
wedługwzoruzlistingu2.12,ajegonagłówekuzupełnijopo-
lecenie
usingSystem.Threading;
Listing2.12.Działaniepętlijestprzerywanepootrzymaniuodpowiedniegosygnału
publicstaticdoubleEstimatePi(longrandomPointsCount,
CancellationTokencancellationToken=default(CancellationToken))
{
CheckRandomPointsCount(randomPointsCount);
doubleresult=0.0d;
longpointsInsideCircleCount=0;
for(longi=0;i<randomPointsCount
&&!cancellationToken.IsCancellationRequested;i++)
{
doublex=randomNumberGenerator.NextDouble();
doubley=randomNumberGenerator.NextDouble();
if(Distance(x,y)<=radius)
{
pointsInsideCircleCount++;
}
}
if(randomPointsCount>0)
{
result=4.0d*pointsInsideCircleCount/
randomPointsCount;
}
returnresult;
}
3.Wplikudefniującymlogikęwidoku
MainPage
(MainPage.xaml.cs)wykonaj
następującezmiany:
a.Defnicjęklasy
MainPage
uzupełnijometodyzlistingu2.13orazopry-
watnepole
privateCancellationTokenSourcecancellationTokenSource;
b.Wkonstruktorzeklasy
MainPage
umieśćwywołaniemetody
SetCal-
culationStateanalogiczniejaktoprzedstawialisting2.14.
c.Kodźródłowymetody
PrepareResult
(listing2.3)zmodyfkujzgodnie
zlistingiem2.15.
d.Wmetodzie
PerformCalculationsAsync
wstawpoleceniawyróżnione
nalistingu2.16,ametodęPerformCalculationszmodyfkujwedług
wzoruzlistingu2.17.