Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… устройств Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ .NET Compact FrameworkΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 78

Автор Иво Π‘Π°Π»ΠΌΡ€Π΅

1. ЗапуститС Visual Studio .NET (2003 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ позднюю Π²Π΅Ρ€ΡΠΈΡŽ) ΠΈ создайтС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ C# Smart Device Application.

2. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π² качСствС Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Smartphone. (Для вас Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски создан ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΈ Π½Π° экранС появится конструктор Ρ„ΠΎΡ€ΠΌ для Smartphone.)

3. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ рис. 9.2 Π² качСствС ΠΎΠ±Ρ€Π°Π·Ρ†Π° для ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Ρ„ΠΎΡ€ΠΌΡ‹, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² Π½Π΅Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ элСмСнты управлСния:

 β€’ TextBox (textBox1); Π·Π°Π΄Π°ΠΉΡ‚Π΅ Π² качСствС значСния свойства Text Π΄Π»ΠΈΠ½Π½ΡƒΡŽ Ρ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΡƒΡŽ строку (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 12345678901234).

 β€’ Label (label1); ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ элСмСнта управлСния Label Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Π·Π°Π½ΠΈΠΌΠ°Π» Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ области Ρ„ΠΎΡ€ΠΌΡ‹. Π’ Π½Π΅ΠΌ придСтся ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ тСкст, состоящий ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… строк.

 β€’ Timer (timer1).

4. Π’Ρ‹Π΄Π΅Π»ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ MainMenu Π² Π½ΠΈΠΆΠ½Π΅ΠΉ части ΠΎΠΊΠ½Π° конструктора Ρ„ΠΎΡ€ΠΌ ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ мСню:

 β€’ ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΊ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΌΡƒ слСва мСню (содСрТащСму тСкст "Type Here" ("НабирайтС здСсь")) ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Exit Π² качСствС тСкста мСню. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΊΠ½ΠΎ Properties, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ имя элСмСнта мСню с menuItem1 Π½Π° menuItemExit. 

 β€’ Π‘ΠΏΡ€Π°Π²Π° ΠΎΡ‚ мСню Exit, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ (Ρ‚Π°ΠΌ, Π³Π΄Π΅ находится тСкст "Type Here"), Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Prime Search Π² качСствС тСкста мСню. ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΏΡ€ΠΈ нСобходимости ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ рис. 9.2.

 β€’ Над мСню Prime Search, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ (Ρ‚Π°ΠΌ, Π³Π΄Π΅ находится тСкст "Type Here"), Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Start Π² качСствС тСкста мСню. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΊΠ½ΠΎ Properties, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ имя элСмСнта мСню с menuItem2 Π½Π° menuItemStart. ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΏΡ€ΠΈ нСобходимости ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ рис. 9.2.

 β€’ НиТС мСню Start, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ (Ρ‚Π°ΠΌ, Π³Π΄Π΅ находится тСкст "Type Here"), Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Abort Π² качСствС тСкста мСню. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΊΠ½ΠΎ Properties, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ имя элСмСнта мСню с menuItem2 Π½Π° menuItemStart. ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΏΡ€ΠΈ нСобходимости ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ рис. 9.2. 

5. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½ΠΎΠ²Ρ‹ΠΉ класс. НазовитС Π΅Π³ΠΎ FindNextPrimeNumber.сs. Π—Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ содСрТимоС ΠΊΠΎΠ΄Π° класса Π² ΠΎΠΊΠ½Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° ΠΊΠΎΠ΄ΠΎΠΌ ΠΈΠ· листинга 9.5. 

6. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΎΠΊΠ½ΠΎ Form1.cs [Design] ΠΈ Π΄Π²Π°ΠΆΠ΄Ρ‹ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Π½Π° элСмСнтС мСню Exit. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ этого Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски сгСнСрирована функция void menuItemExit_Click(), Π° фокус пСрСмСстится Π² ΠΎΠΊΠ½ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° ΠΊΠΎΠ΄Π°. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ для этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠΎΠ΄ ΠΈΠ· листинга 9.4. 

7. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΎΠΊΠ½ΠΎ Form1.cs [Design] ΠΈ Π΄Π²Π°ΠΆΠ΄Ρ‹ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Π½Π° элСмСнтС мСню Start. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ этого Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски сгСнСрирована функция private void menuItemStart_Click(), Π° фокус пСрСмСстится Π² ΠΎΠΊΠ½ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° ΠΊΠΎΠ΄Π°. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ для этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠΎΠ΄ ΠΈΠ· листинга 9.4. 

8. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΎΠΊΠ½ΠΎ Form1.cs [Design] ΠΈ Π΄Π²Π°ΠΆΠ΄Ρ‹ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Π½Π° Π½Π°Π·Π²Π°Π½ΠΈΠΈ мСню Abort. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ этого Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски сгСнСрирована функция private void menuItemAbort_Click(), Π° фокус пСрСмСстится Π² ΠΎΠΊΠ½ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° ΠΊΠΎΠ΄Π°. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ для этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠΎΠ΄ ΠΈΠ· листинга 9.4. 

9. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΎΠΊΠ½ΠΎ Form1.CS [Design] ΠΈ Π΄Π²Π°ΠΆΠ΄Ρ‹ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Π½Π° элСмСнтС управлСния timer1 Π² Π½ΠΈΠΆΠ½Π΅ΠΉ части ΠΎΠΊΠ½Π° конструктора. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ этого Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски сгСнСрирована функция private void timer1_Tick(). Π’Π²Π΅Π΄ΠΈΡ‚Π΅ для этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠΎΠ΄ ΠΈΠ· листинга 9.4. 

10. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π² класс Form1.cs ΠΎΡΡ‚Π°Π»ΡŒΠ½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΈΠ· листинга 9.4. 

11. НаТмитС ΠΊΠ»Π°Π²ΠΈΡˆΡƒ <F5> для компиляции ΠΊΠΎΠ΄Π° ΠΈ развСртывания прилоТСния Π² эмуляторС Smartphone.

Запустив ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ сначала ΠΊΠ½ΠΎΠΏΠΊΡƒ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π° для Π²Ρ‹Π·ΠΎΠ²Π° мСню Prime Search, Π° Π·Π°Ρ‚Π΅ΠΌ β€” ΠΊΠ»Π°Π²ΠΈΡˆΡƒ <1> для Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΡƒΠ½ΠΊΡ‚Π° мСню Start Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ этого начнСтся поиск простых чисСл. Π’ процСссС выполнСния поиска элСмСнт управлСния timer1 Π±ΡƒΠ΄Π΅Ρ‚ нСсколько Ρ€Π°Π· Π² сСкунду Π²Ρ‹Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ событиС Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, Π·Π°ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΉ Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ тСкст с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ состоянии. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ динамичСского обновлСния этого тСкста, происходящСго нСсколько Ρ€Π°Π· Π² сСкунду, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ рСгулярноС ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ запрос обрабатываСтся. ΠŸΡ€ΠΎΡ†Π΅ΡΡ поиска продолТаСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ простоС число ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ ΠΏΡƒΠ½ΠΊΡ‚ Abort мСню Prime Search ΠΈ Π½Π΅ Π½Π°ΠΆΠΌΠ΅Ρ‚ ΠΊΠ½ΠΎΠΏΠΊΡƒ <2>. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ поиска, ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Π² тСкстовом ΠΏΠΎΠ»Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ большоС число. На ΠΌΠΎΠ΅ΠΌ эмуляторС поиск для Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ числа 12345678901234 длился Π±ΠΎΠ»Π΅Π΅ 20 сСкунд. Π’ Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΊΠ°ΠΊ ΠΎΠ½ Π΅ΡΡ‚ΡŒ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄ Π½Π΅ прСпятствуСт запуску Π½ΠΎΠ²ΠΎΠ³ΠΎ поиска Π² Ρ‚ΠΎ врСмя, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Π΅Ρ‰Π΅ Π½Π΅ закончился. Π‘ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ, Ссли Π²Ρ‹ ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΡƒΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ввСдя Π² Π½Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ этого условия ΠΈ прСкращая Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ поиска, Ссли ΠΊ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ запуска Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ½ Π΅Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π» Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½. РСкомСндуСтся Ρ‚Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ заглянули Π² ΠΊΠΎΠ΄, прСдставлСнный Π² листингС 9.5. ΠΈ посмотрСли, ΠΊΠ°ΠΊ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово lock ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² критичСский Ρ€Π°Π·Π΄Π΅Π», Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ бСзопасным Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ выполнСния.

Листинг 9.4. Код, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ Π² класс Smartphone Form1.cs

//------------------------------------------------------

//Π’Π΅ΡΡŒ этот ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса Form1.cs

//------------------------------------------------------


//ΠžΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ всС Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Π΅ вычислСния

FindNextPrimeNumber m_findNextPrimeNumber;


//--------------------------------------------

//ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ тСкст, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΎ состоянии...

//--------------------------------------------

void setCalculationStatusText(string text) {

 label1.Text = text;

}


//-------------------------------------

//ΠŸΡƒΠ½ΠΊΡ‚ мСню для "Π²Ρ‹Ρ…ΠΎΠ΄Π°" ΠΈΠ· прилоТСния

//-------------------------------------

private void menuItemExit_Click(object sender, System.EventArgs e) {

 this.Close();

}


//----------------------------------------

//ΠŸΡƒΠ½ΠΊΡ‚ мСню для Π½Π°Ρ‡Π°Π»Π° Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… вычислСний

//----------------------------------------

private void menuItemStart_Click(object sender, System.EventArgs e) {

 //Число, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ поиск

 long startNumber = System.Convert.ToInt64(textBox1.Text);


 //Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅

 m_findNextPrimeNumber = new FindNextPrimeNumber(startNumber);


 //Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅

 m_findNextPrimeNumber.findNextHighestPrime_Async();

 //Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для контроля Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ вычислСний

 timer1.Interval = 400;

 //400 мс timer1.Enabled = true;

}


//--------------------------------------------

//ΠŸΡƒΠ½ΠΊΡ‚ мСню для "ΠΎΡ‚ΠΌΠ΅Π½Ρ‹" Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΉΡΡ Π·Π°Π΄Π°Ρ‡ΠΈ

//--------------------------------------------

private void menuItemAbort_Click(object sender, System.EventArgs e) {

 //He Π΄Π΅Π»Π°Ρ‚ΡŒ Π½ΠΈΡ‡Π΅Π³ΠΎ, Ссли вычислСния Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ

 if (m_findNextPrimeNumber == null) return;

 //Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ Π² состояниС прСкращСния выполнСния

 m_findNextPrimeNumber.setProcessingState(FindNextPrimeNumber.ProcessingState.reguestAbort);

 //НСмСдлСнно ΠΈΠ·Π²Π΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

 //o готовности ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅...

 setCalculationStatusText("Waiting to abort...");

 // setCalculationStatusText("ОТиданиС прСкращСния выполнСния...");

}


//-------------------------------------------------------------

//Π­Ρ‚ΠΎΡ‚ Ρ‚Π°ΠΉΠΌΠ΅Ρ€, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса,

//позволяСт ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ состояниС выполнСния

//Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… вычислСний

//-------------------------------------------------------------

private void timer1_Tick(object sender, System.EventArgs e) {

 //Если ΠΊ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ Π²Ρ‹Π·ΠΎΠ²Π° искомоС простоС число Π΅Ρ‰Π΅

 //Π½Π΅ Π±Ρ‹Π»ΠΎ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€

 if (m_findNextPrimeNumber == null) {

  timer1.Enabled =false;

  return;

 }

 //-------------------------------------------------

 //Если Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½ΠΎ, ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚,

 //ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΠΉ поиск, ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€

 //-------------------------------------------------

 if (m_findNextPrimeNumber.getProcessingState ==

     FindNextPrimeNumber.ProcessingState.aborted) {

  timer1.Enabled = false;

  m_findNextPrimeNumber = null;

 setCalculationStatusText("Prime search aborted");

  // setCalculationStatusText("поиск простого числа ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½");

  return;

 }

 //----------------------------------

 //Удалось Π»ΠΈ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚?

 //----------------------------------

 if (m_findNextPrimeNumber.getProcessingState ==

     FindNextPrimeNumber.ProcessingState.foundPrime) {

  timer1.Enabled = false;

  //ΠžΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚

  setCalculationStatusText("Found! Next Prime = " + m_findNextPrimeNumber.getPrime().ToString());

  // setCalculationStatusText("Π§ΠΈcΠ»o Π½Π°ΠΉΠ΄Π΅Π½ΠΎ! Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ простоС число = " +

  // m_findNextPrimeNumber.getPrime().ToString());

  m_findNextPrimeNumber = null;

  return;

 }


 //--------------------------------------

 //ВычислСния ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ΡΡ. Π˜Π½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ

 //ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎ состоянии выполнСния

 //--------------------------------------


 //ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π²Π° Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… значСния

 long numberCalculationsToFar;

 long currentItem;

 m_findNextPrimeNumber.getExecutionProgressInfo(out numberCalculationsToFar,out currentItem);

 setCalculationStatusText("In progress. Looking at: " +

  currentItem.ToString() + ". " +