ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ c windows form
ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ. ΠΎΡΡΡΠ΅ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Windows Forms
ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ²ΡΡΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Windows Forms ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π½ΠΎ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Windows Forms Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌ. ΠΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΎΡΠ΅Π½Ρ ΡΠ΅ΡΡΠ΅Π·Π½ΡΡ ΠΈ ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ. ΠΠ²Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΡΠΎΠΊΠ°, ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π½Π΅ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠΌΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΡ Π³ΠΎΠ½ΠΊΠΈ, Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, Π·Π°Π²ΠΈΡΠ°Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΠΈΠΊΡΠ°ΡΠΈΠΈ. ΠΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΌ. Π² ΡΠ°Π·Π΄Π΅Π»Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ ΠΏΠΎ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ.
ΠΠ΅Π½Π°Π΄Π΅ΠΆΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ
ΠΡΠ·Π²Π°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½Π°ΠΏΡΡΠΌΡΡ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΡΠΎΠ·Π΄Π°Π» Π΅Π³ΠΎ, Π½Π΅Π²Π°ΠΆΠ½ΠΎ. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ΅ ΠΊΠΎΠ΄Π° ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π΅Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΠΉ Π²ΡΠ·ΠΎΠ² System.Windows.Forms.TextBox ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ. Button1_Click ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ±ΡΡΠΈΠΉ ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ WriteTextUnsafe ΠΏΠΎΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° TextBox.Text Π½Π°ΠΏΡΡΠΌΡΡ.
Π‘Π΅ΠΉΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ
Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ΠΊΠΎΠ΄Π° Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΡΡ Π΄Π²Π° ΡΠΏΠΎΡΠΎΠ±Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Windows Forms ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΡΠΎΠ·Π΄Π°Π» Π΅Π³ΠΎ.
Π ΠΎΠ±ΠΎΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ΡΠΎΠ½ΠΎΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π·Π°ΠΆΠ΄Π΅Ρ ΠΎΠ΄Π½Ρ ΡΠ΅ΠΊΡΠ½Π΄Ρ Π΄Π»Ρ ΠΈΠΌΠΈΡΠ°ΡΠΈΠΈ ΡΠ°Π±ΠΎΡΡ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΉ Π² ΡΡΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅.
ΠΡΠΈΠΌΠ΅Ρ. ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° Invoke Ρ Π΄Π΅Π»Π΅Π³Π°ΡΠΎΠΌ
Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ ΡΠ°Π±Π»ΠΎΠ½ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Windows Forms. ΠΠ½ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ System.Windows.Forms.Control.InvokeRequired ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π‘Π ΠΠΠΠΠΠΠΠ’ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΠΎΡΠΎΠΊΠ° ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°. ΠΡΠ»ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ, ΠΎΠ½ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½Π°ΠΏΡΡΠΌΡΡ. ΠΡΠ»ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ, ΠΎΠ½ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Control.Invoke ΠΌΠ΅ΡΠΎΠ΄ Ρ Π΄Π΅Π»Π΅Π³Π°ΡΠΎΠΌ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π²ΡΠ·ΠΎΠ² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ.
ΠΡΠΈΠΌΠ΅Ρ. ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠΎΠ±ΡΡΠΈΠΉ BackgroundWorker
ΠΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ System.ComponentModel.BackgroundWorker ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π³ΠΎ ΠΌΠΎΠ΄Π΅Π»Ρ, ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ ΡΠΎΠ±ΡΡΠΈΡΠΌΠΈ. Π€ΠΎΠ½ΠΎΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ BackgroundWorker.DoWork ΡΠΎΠ±ΡΡΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ. ΠΠ»Π°Π²Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ BackgroundWorker.ProgressChanged BackgroundWorker.RunWorkerCompleted ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°.
ΠΡΠΎΡΡΠ°Ρ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ Π² Windows Forms. Π§Π°ΡΡΡ 1
ΠΠ²ΡΠΎΡ: ΠΡΠΈΡ Π‘Π΅Π»Π»Π· (Chris Sells)
Sells Brothers Consulting
ΠΡΡΠΎΡΠ½ΠΈΠΊ: GotDotNet.ru
ΠΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ: 05.06.2003
ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ: 13.03.2005
ΠΠ΅ΡΡΠΈΡ ΡΠ΅ΠΊΡΡΠ°: 1.0
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
Π ΠΈΡ. 1. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Digits of Pi
ΠΠ½Π΄ΠΈΠΊΠ°ΡΠΈΡ Ρ ΠΎΠ΄Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ
Π ΠΈΡ. 2. ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ pi Ρ ΡΠΎΡΠ½ΠΎΡΡΡΡ Π΄ΠΎ 1000 Π·Π½Π°ΠΊΠΎΠ²
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄, ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ (UI) ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π·Π½Π°ΠΊΠΎΠ² pi.
ΠΡΠ΅ ΡΠ»ΠΎ Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΠΎΠΊΠ° Π² ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ pi Ρ ΡΠΎΡΠ½ΠΎΡΡΡΡ Π΄ΠΎ 1000 Π·Π½Π°ΠΊΠΎΠ² Ρ Π½Π΅ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΠ»ΡΡ Π² Π΄ΡΡΠ³ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π° ΠΏΠΎΡΠΎΠΌ Π²Π΅ΡΠ½ΡΠ»ΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ. Π’ΠΎ, ΡΡΠΎ Ρ ΡΠ²ΠΈΠ΄Π΅Π», ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΈΡ. 3.
Π ΠΈΡ. 3. Π‘ΠΎΠ±ΡΡΠΈΠ΅ paint ΠΏΡΠΎΠΏΠ°Π»ΠΎ!
ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ
ΠΠ° ΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ±ΡΡΠΈΡ Click Π²ΡΠ³Π»ΡΠ΄Π΅Π» ΡΠ°ΠΊ:
ΠΠ΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° CalcPi Π½Π΅ Π²Π΅ΡΠ½Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΎΠΊ Π½Π΅ Π²ΡΠΉΠ΄Π΅Ρ ΠΈΠ· ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Click, Π° Π·Π½Π°ΡΠΈΡ, ΡΠΎΡΠΌΠ° Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅ Paint (ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅). Π Π΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°ΠΏΡΡΡΠΈΠ² Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ:
Π ΠΈΡ. 4. ΠΡΠΈΠΌΠΈΡΠΈΠ²Π½Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ Π΄Π΅Π»Π΅Π³Π°Ρ, Ρ ΠΌΠΎΠ³Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ, ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΡ CalcPi:
Π’Π΅ΠΏΠ΅ΡΡ Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΠ» Π±Ρ Π±ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»Π΅Π½. Π ΠΌΠΎΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ UI ΡΠΎΠΎΠ±ΡΠ°Π» ΠΎ Ρ ΠΎΠ΄Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ. Π Ρ Π±ΡΠ» Π΄ΠΎΠ²ΠΎΠ»Π΅Π½, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ½ΡΠ», ΡΡΠΎ Π½Π°ΡΠ²ΠΎΡΠΈΠ».
ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ
ΠΠ΅ΡΠ²Π°Ρ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ Invoke ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π΄Π΅Π»Π΅Π³Π°ΡΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ Π² UI-ΠΏΠΎΡΠΎΠΊΠ΅. ΠΠΈΠΊΠ°ΠΊΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΎΠ½Π° Π½Π΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΡ, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠ°Ρ Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ UI (ShowProgress), ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΠΎΡΠ°Ρ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ. Π§ΡΠΎΠ±Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π»ΠΈΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ, Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ Π΄Π΅Π»Π΅Π³Π°Ρ Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄Π° ShowProgress. ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° Invoke Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ Π²ΡΠ·ΠΎΠ²Ρ ShowProgress ΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΠΎΠΊΠ½Ρ Π±ΡΠ΄ΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ Π² ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ (Π½Π΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΠΎΠ±Π° Π²ΡΠ·ΠΎΠ²Π° ShowProgress Π² CalcPi):
ΠΠ΅ΡΠΎΠ΄ Invoke Π½Π°ΠΊΠΎΠ½Π΅Ρ-ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» ΠΌΠ½Π΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Windows Forms. UI-ΠΏΠΎΡΠΎΠΊ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅Ρ ΡΠ°Π±ΠΎΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ UI-ΠΏΠΎΡΠΎΠΊΡ, ΠΊΠΎΠ³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π² ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½Π°Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½Π° ΡΠΈΡ. 5.
Π ΠΈΡ. 5. ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ
Π£ΠΏΡΠΎΡΠ΅Π½Π½Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ
BeginInvoke Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½Π΅Π΅, Π΅ΡΠ»ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΡΡΠ°Π·Ρ ΠΆΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΠ΅, ΡΡΠΎ ΠΈΡΠΊΠ»ΡΡΠ°Π΅Ρ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π ΡΡΠΎΠΌ ΠΊΠΎΡΠΎΡΠΊΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ ΠΏΠΎΠΊΠ°Π·Π°Π», ΠΊΠ°ΠΊ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ Ρ ΠΎΠ΄ ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, Π° UI ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π» ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. Π‘ ΡΡΠΎΠΉ ΡΠ΅Π»ΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ Π΄Π΅Π»Π΅Π³Π°Ρ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΈ ΠΌΠ΅ΡΠΎΠ΄ Invoke Π΄Π»Ρ Π³Π»Π°Π²Π½ΠΎΠΉ ΡΠΎΡΠΌΡ. ΠΡΠΈ ΡΡΠΎΠΌ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ Π΄Π΅Π»Π΅Π³Π°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΡΡ Π² UI-ΠΏΠΎΡΠΎΠΊΠ΅.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΈΠΌΠ΅Π΅ΡΠ΅ Π΄Π΅Π»ΠΎ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ Π½Π°Π±ΠΎΡΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ , Π²Ρ Π²ΡΡΠ΄ Π»ΠΈ Π·Π°Ρ ΠΎΡΠΈΡΠ΅ ΠΈΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ ΡΠΎΠ²Π΅ΡΡΡ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ Windows Forms ΡΠΎΡΠ΅ΡΠ°ΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ Π΄Π΅Π»Π΅Π³Π°ΡΡ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±ΠΎΡΠΈΠΌ ΠΈ UI-ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ.
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΠ½ΠΎΡΡΠΈ
ΠΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ Π² C#: ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ Π² C# ΠΈ ΠΊΠ°ΠΊ Π² ΠΏΠΎΡΠΎΠΊΠ΅ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΡΠΎΡΠΌΡ
ΠΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΠ΅Π»Ρ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ ΡΠ±ΠΎΡΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Ρ Π·Π½Π°Ρ, ΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π½ΠΎ Π²ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ Π½Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΡΠΎΠΎΠ±ΡΠ°ΡΡ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ΅, ΡΡΠΎ Π½Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π·Π°Π²ΠΈΡΠ°Π΅Ρ. ΠΠΎΡΡΠΎΠΌΡ ΡΠ΅ΡΠΈΠ» Ρ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ Π΄Π°Π½Π½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ ΠΈ ΠΏΠΎΠ³ΡΡΠ·ΠΈΠ»ΡΡ Π² ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΠ°ΠΏΠΈΡΠ°Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ΅, ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠΌ Π΄ΠΎΡΡΡΠΏΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΡΠΎΡΠΌΡ ΠΈ Ρ.Π΄. Π£ Π½Π°ΡΠΈΠ½Π°ΡΡΠ΅Π³ΠΎ ΠΎΡ ΡΡΠΎΠ³ΠΎ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΠΌΠΎΠ·Π³ ΠΏΠ»Π°Π²ΠΈΡΡΡΡ ΠΈΠ·-Π·Π° Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΈ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΏΠΎΠ½ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ.
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ Π² C#
ΠΠΎΡΠ»Π΅ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ ΡΠ΅ΠΌΡ, ΠΏΡΠΎΠ± ΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ, ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ ΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π²ΡΡ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ. Π‘Π΅ΠΉΡΠ°Ρ ΠΏΠΎΡΡΠ°ΡΠ°ΡΡΡ ΠΏΡΠΎΡΡΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ, ΠΊΠ°ΠΊ Π·Π°ΠΏΡΡΡΠΈΡΡ Π·Π°Π΄Π°ΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅.
ΠΠ°Π»Π΅Π΅ Ρ Π½Π°Ρ Π΅ΡΡΡ Π½Π΅ΠΊΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ 1 (func1) Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π΅ΠΊΠΈΠΉ ΠΊΠΎΠ΄ ΠΈ Π² ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΊΡΡΠΎΠΊ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ 2 (func2), Π² ΠΊΠΎΡΠΎΡΡΡ Π²ΡΠ½Π΅ΡΡΠΈ Π²Π΅ΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π² Π½ΡΠΆΠ½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ 1 Π½Π°ΠΌ Π½Π°Π΄ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ, ΠΊΠΎΠ³Π΄Π° Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠΎΠ΄. Π’Π΅ΠΏΠ΅ΡΡ Π²ΡΡ Π²ΡΡΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΌΡ ΠΎΠΏΠΈΡΠ΅ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΈΠ²ΡΠ» Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΡΡΠΎΠ±Ρ Π΄Π°Π»Π΅Π΅ ΠΏΡΠΎΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ 1. Π‘Π½Π°ΡΠ°Π»Π° Ρ Π½Π°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π΅ΠΊΠΈΠΉ Β«ΠΠΠ 1Β» ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΌΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΈ ΡΡΠ°Π·Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Β«ΠΠΠ 2Β», ΠΏΠΎΡΠΎΠΌ Π΄ΠΎΡ ΠΎΠ΄ΠΈΠΌ Π΄ΠΎ Π·Π°ΠΏΡΡΠΊΠ° Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΈ Π΅Π³ΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΈ ΡΡΠ°Π·Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ ΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° Β«ΠΠΠ 3Β». Π ΠΈΡΠΎΠ³Π΅ Ρ Π½Π°Ρ Π΄Π²Π° ΠΏΠΎΡΠΎΠΊΠ° Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΊΠΎΠ΄ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ Β«func2Β» ΠΈ Β«func3Β» ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Β«func1Β».
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ Π½Π°Ρ ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Β«ΠΠΠ 3Β» ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π²ΡΡ ΠΎΠ΄ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ 1 ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎΠΊΠ° Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ Π²Π΅ΡΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΠΉ ΠΈΠΌΠΈ ΠΊΠΎΠ΄. ΠΡΡΡ ΡΠΏΠΎΡΠΎΠ±, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ Π³Π»Π°Π²Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΠΏΡΡΡΠΈΠ»Π° ΠΏΠΎΡΠΎΠΊΠΈ, ΡΡΠ°Π·Ρ Π·Π°Π²Π΅ΡΡΠ°ΡΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ², Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Β«IsBackground = trueΒ»:
Π’Π΅ΠΏΠ΅ΡΡ Ρ Π½Π°Ρ ΠΏΠΎΡΠΎΠΊ Π±ΡΠ΄Π΅Ρ Π·Π°Π²Π΅ΡΡΡΠ½ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Β«ΠΠΠ 2Β».
ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΠ·Π½Π°ΡΡ Π² ΠΊΠ°ΠΊΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΡΠ΅ΠΉΡΠ°Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΠΉ Π²Π°ΠΌΠΈ ΠΏΠΎΡΠΎΠΊ, ΡΠΎ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΅Π³ΠΎ ΡΡΠ°ΡΡΡ Β«potok1.ThreadStateΒ». ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠ°ΡΡΡΠΎΠ² ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΡΠ°ΠΉΡΠ΅ Microsoft.
ΠΠ°ΠΊ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ Π² C# ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΡΠΎΡΠΌΡ
ΠΡΠ»ΠΈ Π²Ρ Π·Π°ΠΏΡΡΡΠΈΠ»ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ, ΡΠΎ Π²Ρ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΡΠΎΡΠΌΡ Π½Π°ΠΏΡΡΠΌΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²Π°ΠΌ Π±ΡΠ΄Π΅Ρ Π²ΡΠ΄Π°Π²Π°ΡΡΡΡ ΠΎΡΠΈΠ±ΠΊΠ° ΠΌΠΎΠ» Π²Ρ ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΠ΅ΡΡ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π½Ρ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅. ΠΡΠ° ΡΠΈΡΡΠ°ΡΠΈΡ ΠΏΠΎΠΏΡΠ°Π²ΠΈΠΌΠ°, ΠΈ ΠΌΡ ΡΠ΅ΠΉΡΠ°Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π³Π΄Π΅ ΠΎΠ½ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ.
Π’Π΅ΠΏΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄Π΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΉ Π½Π°ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½Ρ:
Π’Π΅ΠΏΠ΅ΡΡ Π² ΠΊΠΎΠ΄Π΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΌΡ Ρ Π²Π°ΠΌΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΎΠ±ΡΠ°ΡΠΈΠ²ΡΠΈΡΡ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΠΈΠΉ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ:
Π ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ Π΅ΡΠ»ΠΈ Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π² Π² Π½Π΅Π³ΠΎ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅? ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ Β«MyDelegateΒ» Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ:
Π ΡΠΎΠ·Π΄Π°ΡΠΌ ΡΡΠ½ΠΊΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄Π΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΉ Π½Π°ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, Ρ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ.
Π’Π΅ΠΏΠ΅ΡΡ Π² ΠΊΠΎΠ΄Π΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΎΠ±ΡΠ°ΡΠΈΠ²ΡΠΈΡΡ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΠΈΠΉ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π² ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠ΅ Π½Π°ΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅:
ΠΡΠ½ΠΎΠ²Π° Π·Π°Π»ΠΎΠΆΠ΅Π½Π°, Π° Π΄Π°Π»ΡΡΠ΅ ΡΠΆΠ΅ ΠΎΡΡΠ°ΡΡΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΡΡΠΈΠ³Π°ΡΡ Π³Π»ΡΠ±ΠΈΠ½Π½ΡΠΉ ΡΠΌΡΡΠ» ΠΏΠΎΡΠΎΠΊΠΎΠ² 🙂
How to: Make thread-safe calls to Windows Forms controls
Multithreading can improve the performance of Windows Forms apps, but access to Windows Forms controls isn’t inherently thread-safe. Multithreading can expose your code to very serious and complex bugs. Two or more threads manipulating a control can force the control into an inconsistent state and lead to race conditions, deadlocks, and freezes or hangs. If you implement multithreading in your app, be sure to call cross-thread controls in a thread-safe way. For more information, see Managed threading best practices.
There are two ways to safely call a Windows Forms control from a thread that didn’t create that control. You can use the System.Windows.Forms.Control.Invoke method to call a delegate created in the main thread, which in turn calls the control. Or, you can implement a System.ComponentModel.BackgroundWorker, which uses an event-driven model to separate work done in the background thread from reporting on the results.
Unsafe cross-thread calls
It’s unsafe to call a control directly from a thread that didn’t create it. The following code snippet illustrates an unsafe call to the System.Windows.Forms.TextBox control. The Button1_Click event handler creates a new WriteTextUnsafe thread, which sets the main thread’s TextBox.Text property directly.
Safe cross-thread calls
The following code examples demonstrate two ways to safely call a Windows Forms control from a thread that didn’t create it:
In both examples, the background thread sleeps for one second to simulate work being done in that thread.
Example: Use the Invoke method with a delegate
The following example demonstrates a pattern for ensuring thread-safe calls to a Windows Forms control. It queries the System.Windows.Forms.Control.InvokeRequired property, which compares the control’s creating thread ID to the calling thread ID. If the thread IDs are the same, it calls the control directly. If the thread IDs are different, it calls the Control.Invoke method with a delegate from the main thread, which makes the actual call to the control.
Example: Use a BackgroundWorker event handler
An easy way to implement multithreading is with the System.ComponentModel.BackgroundWorker component, which uses an event-driven model. The background thread runs the BackgroundWorker.DoWork event, which doesn’t interact with the main thread. The main thread runs the BackgroundWorker.ProgressChanged and BackgroundWorker.RunWorkerCompleted event handlers, which can call the main thread’s controls.
To make a thread-safe call by using BackgroundWorker, create a method in the background thread to do the work, and bind it to the DoWork event. Create another method in the main thread to report the results of the background work, and bind it to the ProgressChanged or RunWorkerCompleted event. To start the background thread, call BackgroundWorker.RunWorkerAsync.
The example uses the RunWorkerCompleted event handler to set the TextBox control’s Text property. For an example using the ProgressChanged event, see BackgroundWorker.