Stathread c ΡΡΠΎ ΡΡΠΎ
STAThread Attribute ΠΠ»Π°ΡΡ
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°, Π² ΠΊΠΎΡΠΎΡΡΡ Π΄ΠΎ Π²ΡΠΏΡΡΠΊΠ° ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²Π½Π΅ΡΠ΅Π½Ρ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. ΠΠ°ΠΉΠΊΡΠΎΡΠΎΡΡ Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π³Π°ΡΠ°Π½ΡΠΈΠΉ, ΡΠ²Π½ΡΡ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΠΌΡΡ , ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π·Π΄Π΅ΡΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΠΉ.
Π£ΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΡ COM Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ΄ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (STA).
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ
ΠΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ ΡΡΠΎΡ Π°ΡΡΠΈΠ±ΡΡ ΠΊ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠΎΡΠΊΠΈ Π²Ρ ΠΎΠ΄Π° ( Main() ΠΌΠ΅ΡΠΎΠ΄ Π² C# ΠΈ Visual Basic). ΠΠ½ Π½Π΅ Π²Π»ΠΈΡΠ΅Ρ Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ. Π§ΡΠΎΠ±Ρ Π·Π°Π΄Π°ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΠ° ΠΏΠΎΡΠΎΠΊΠΎΠ², Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌΡΡ Π² ΠΊΠΎΠ΄Π΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Thread.SetApartmentState Thread.TrySetApartmentState ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΡΡΠΊΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ°.
ΠΠ±ΡΠΈΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΡ ΠΌΠΎΠ΄Π΅Π»ΡΡ COM ΡΠΌ. Π² ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ COM.
ΠΠΎΡΠΎΠΊΠΎΠ²ΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ COM ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΌ COM-Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅. ΠΠ»Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ COM ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ΅ ΠΏΠΎΠ΄ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅. ΠΠΎΡΠΎΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ COM-Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ, Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠΎΠΊ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ·ΡΠ²Π°Π΅Ρ COM-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ. ΠΡΠ»ΠΈ COM-Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, ΠΏΠΎΡΠΎΠΊ Π½Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ, Π° STAThreadAttribute Π°ΡΡΠΈΠ±ΡΡ, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, Π½Π΅ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π²Π»ΠΈΡΠ½ΠΈΡ.
Π―Π·ΡΠΊ | ΠΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠ΄ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ COM |
---|---|
C# | ΠΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ΅ ΠΏΠΎΠ΄ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ |
C++ | ΠΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ΅ ΠΏΠΎΠ΄ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ |
Visual Basic | ΠΠ΄Π½ΠΎΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ΄ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ |
Π§ΡΠΎΠ±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ STAThreadAttribute Π°ΡΡΠΈΠ±ΡΡ, ΡΡΠΎΠ±Ρ Π·Π°Π΄Π°ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΠ»ΠΈ Thread.SetApartmentState Thread.TrySetApartmentState ΠΏΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΡΡΠΊΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ° Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ»ΠΈ. Π C++ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΠ° /CLRTHREADATTRIBUTE Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΠΎΠ΄ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ, Π² ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ STAThreadAttribute Π°ΡΡΠΈΠ±ΡΡ, ΡΡΠΎΠ±Ρ ΡΠ²Π½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ Π² ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ΄ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅:
Π²Ρ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Windows Forms. Windows ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΎΡΠΌ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΠΌΠΈ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡ Ρ WindowsΠ½ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΡ, ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈΠ»ΠΈ Windows ΠΎΠ±ΡΠΈΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΡΠ΅ ΠΎΠΊΠ½Π°, ΠΈΠ»ΠΈ Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π½ΠΈΡ. ΡΠ°Π±Π»ΠΎΠ½ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Windows Forms Π΄Π»Ρ c# Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ STAThreadAttribute Π°ΡΡΠΈΠ±ΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΡ c#. ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΌΠΎΠ΄Π΅Π»Ρ Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΠ° Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ Visual Basic, Π°ΡΡΠΈΠ±ΡΡ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ.
Π²Ρ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ C#, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Visual Basic, ΠΊΠΎΡΠΎΡΠ°Ρ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ COM-Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅. ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ Visual Basic, ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ STAThreadAttribute Π°ΡΡΠΈΠ±ΡΡΠ°.
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π²ΡΠ·ΠΎΠ²Ρ COM-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ.
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ Π½ΠΎΠ²ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° STAThreadAttribute.
Π‘Π²ΠΎΠΉΡΡΠ²Π°
Π ΡΠ»ΡΡΠ°Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ° Attribute.
ΠΠ΅ΡΠΎΠ΄Ρ
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΠ΅Π΅, ΡΠ°Π²Π΅Π½ Π»ΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Ρ ΡΡ-ΠΊΠΎΠ΄ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ Type Π΄Π»Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°.
ΠΡΠΈ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°.
ΠΡΠΈ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠ΅Π΅, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΡΡΠΎΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΡΠ°Π²Π½ΡΠΌ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ.
Π‘ΠΎΠ·Π΄Π°Π΅Ρ Π½Π΅ΠΏΠΎΠ»Π½ΡΡ ΠΊΠΎΠΏΠΈΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Object.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ.
Π―Π²Π½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
Π‘ΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π°Π±ΠΎΡ ΠΈΠΌΠ΅Π½ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΌΡ Π½Π°Π±ΠΎΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΡΠΈΠΏΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΠΉ ΠΎ ΡΠΈΠΏΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡΠΌ ΠΎ ΡΠΈΠΏΠ΅ (0 ΠΈΠ»ΠΈ 1).
ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΡΠΊΡΡΡΡΠΌ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΎΠ½ΠΈ Π½ΡΠΆΠ½Ρ?
ΠΡΠΆΠ΅Π½ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΎΠ½ΠΈ Π½ΡΠΆΠ½Ρ, Π½Π° ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΎΠ½ΠΈ? ΠΠ»Ρ ΡΠ΅Π³ΠΎ Π½ΡΠΆΠ½Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°?
ΠΠΎΡΠΎΡΠ΅,ΡΠΎΠ²Π°ΡΠΈΡΠΈ,Π·Π°Π΄Π°Ρ Π²ΠΎΠΏΡΠΎΡ Π½Π΅ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Π·,ΠΏΠΎΡΡΠΎΠΌΡ,Π΅ΡΠ»ΠΈ ΡΠΆΠ΅ ΠΎΡΠ²Π΅ΡΠ°Π»ΠΈ,ΡΠΎ ΠΏΡΠΎΡΡ ΠΏΡΠΎΡΠ΅Π½ΠΈΡ,Π½ΠΎ Ρ Π·Π°Π±ΡΠ».
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΎΠ½ΠΈ Π½ΡΠΆΠ½Ρ?
ΠΠΎΠ±ΡΡΠΉ Π΄Π΅Π½Ρ, ΡΠΎΡΡΠΌ, ΡΠ΅ΡΠΈΠ» Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΡΠΈΡΠΈΡΡ ΡΠ²ΠΎΠΈ Π·Π½Π°Π½ΠΈΡ c# ΠΈ Π½Π°ΡΠ°Π» Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΡ
ΠΊΠ»Π°ΡΡΠΎΠ²(ΡΠ°Π½ΡΡΠ΅.
Π Π΅ΡΠ΅Π½ΠΈΠ΅
Π§ΡΠΎ-ΡΠΎ Π²ΡΠΎΠ΄Π΅ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΡΠΈΠΏΠΎΠ² ΠΈ ΠΈΡ ΡΠ»Π΅Π½ΠΎΠ². ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ Π²ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π² ΠΌΠΎΠ΄Π΅Π»Ρ, ΡΡΠΎΠ±Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΌ ΡΠ»Π΅Π½ΠΎΠΌ ΡΠΈΠΏΠ°, Π½ΠΎ ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ Ρ ΠΏΡΠΈΠ½ΡΡΠΈΠ΅ΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΎ ΡΠΈΠΏΠ΅ ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΡΠ»Π΅Π½Π΅/ΡΠ»Π΅Π½Π°Ρ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠΌ ΠΊΠ»Π°ΡΡΠ°ΠΌ.
ΠΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π·Π°ΡΠ΅ΠΌ ΠΆΠ΅, Π·Π°ΡΠ΅ΠΌ Π°ΡΠ΄ΠΈΠΎ-ΡΠ°ΠΉΠ»Π°ΠΌ: ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ Π½Π°Π³ΡΡΠ·ΠΊΠ° Π² Π½ΠΈΡ
β ΡΡΠΎ Π±Π°ΠΉΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ΄ΡΡ Π½Π° Π°ΡΠ΄ΠΈΠΎ-ΠΏΠ»Π°ΡΡ ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡΡΡ Π² Π·Π²ΡΠΊ; Π½ΠΎ ΠΊ ΡΠ°ΠΉΠ»Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΠ΅ΠΏΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ: ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ, Π³ΠΎΠ΄ Π·Π°ΠΏΠΈΡΠΈ, Π°Π»ΡΠ±ΠΎΠΌ, Π½ΠΎΠΌΠ΅Ρ ΡΡΠ΅ΠΊΠ° ΠΈ ΠΏΡ. Π‘Π°ΠΌΠΈ ΠΏΠΎ ΡΠ΅Π±Π΅ ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅ Π½ΠΈΠΊΠ°ΠΊ Π½Π° Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡΠΉ Π·Π²ΡΠΊ Π½Π΅ Π²Π»ΠΈΡΡΡ, Π½ΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡΠ΄Ρ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠΉ ΠΏΡΠΎΠΈΠ³ΡΡΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡ
ΡΡΠΈΡΠ°ΡΡ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.
Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Ρ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ: ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠΌ ΠΊΠ»Π°ΡΡΠ°ΠΌ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΊΠ°ΠΊΡΡ-Π½ΠΈΠ±ΡΠ΄Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π²Π°ΡΠ΅ΠΌ ΡΠΈΠΏΠ΅. ΠΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅, ΡΡΠΎΠ±Ρ Π²Π°Ρ ΡΠΈΠΏ Ρ
ΠΎΡΠΎΡΠΎ «Π΄ΡΡΠΆΠΈΠ»» Ρ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ, Π²Ρ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΠ΅ ΡΠ²ΠΎΠΉ ΡΠΈΠΏ ΠΈ Π΅Π³ΠΎ ΡΠ»Π΅Π½Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠΈΠΌΠΈ ΡΡΠΎΡ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠΉ ΠΊΠ»Π°ΡΡ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ.
ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ XML-ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΊΠ»Π°ΡΡ XmlSerializer. ΠΠΌΠ΅Π΅ΡΡΡ ΠΊΡΡΠ° Π°ΡΡΠΈΠ±ΡΡΠΎΠ², ΠΎ ΠΊΠΎΡΠΎΡΡΡ
ΡΡΠΎΡ ΠΊΠ»Π°ΡΡ Π·Π½Π°Π΅Ρ ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΡΡ
ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ°.
ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΈΡΠ΅ΡΠ΅ ΡΠ²ΠΎΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΏΠΎΠ΄ Windows Forms, ΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ, ΠΎ ΠΊΠΎΡΠΎΡΡΡ
Π·Π½Π°Π΅Ρ ΠΊΠΎΠ΄ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΠ° ΡΠΎΡΠΌ Π² ΡΡΡΠ΄ΠΈΠΈ: ΠΊ ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ Π²Π°Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΊΠ°ΠΊΠΎΠΉ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΠ΅, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ Π»ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π² Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΠ΅ ΠΈ Ρ.Π΄.
ΠΡΡΡ Π°ΡΡΠΈΠ±ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Conditional. ΠΡΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ²ΠΈΠ΄ΠΈΡ ΡΡΠΎΡ Π°ΡΡΠΈΠ±ΡΡ Π½Π° Π²Π°ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅, ΡΠΎ Π²ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π±ΡΠ΄ΡΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ».
ΠΠΈΠΊΡΠΎ, ΡΠ°Π·ΡΠΌΠ΅Π΅ΡΡΡ, Π½Π΅ Π·Π°ΠΏΡΠ΅ΡΠ°Π΅Ρ Π²Π°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ²ΠΎΠΈ Π°ΡΡΠΈΠ±ΡΡΡ ΠΈ ΠΏΠΎΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΆΠ΅ ΠΊΠΎΠ΄Π΅.
Π§ΡΠΎ Π΄Π΅Π»Π°Π΅Ρ [STAThread]?
Π― ΠΈΠ·ΡΡΠ°Ρ C# 3.5 ΠΈ Ρ Ρ ΠΎΡΡ Π·Π½Π°ΡΡ, ΡΡΠΎ [STAThread] Π΅ΡΡΡ Π»ΠΈ Π² Π½Π°ΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ ?
3 ΠΎΡΠ²Π΅ΡΠΎΠ²:
Π½Π° STAThreadAttribute ΠΏΠΎ ΡΡΡΠ΅ΡΡΠ²Ρ, ΡΡΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊ Π½Π°ΡΠΎΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Windows Π΄Π»Ρ ΡΠ²ΡΠ·ΠΈ Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ COM. Π₯ΠΎΡΡ ΡΠ΄ΡΠΎ Windows Forms Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ COM, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΠ‘, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ.
MSDN ΠΎΠ±ΡΡΡΠ½ΡΠ΅Ρ ΠΏΡΠΈΡΠΈΠ½Ρ ΡΡΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅:
STAThreadAttribute ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΠΠΎΠ΄Π΅Π»Ρ com ΠΏΡΠΎΠ΄Π΅Π²Π°Ρ Π½ΠΈΡΠΊΡ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠΌ ΠΊΠ²Π°ΡΡΠΈΡΠ°. ΠΡΠΎΡ Π°ΡΡΠΈΠ±ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π½Π° ΡΠΎΡΠΊΠ° Π²Ρ ΠΎΠ΄Π° Π»ΡΠ±ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Windows Forms; Π΅ΡΠ»ΠΈ ΠΎΠ½ ΠΎΠΏΡΡΠ΅Π½, ΡΠΎ ΠΎΠΊΠ½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΌΠΎΠ³ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ. ΠΡΠ»ΠΈ Π°ΡΡΠΈΠ±ΡΡ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ, ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠ²Π°ΡΡΠΈΡΡ, ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ Windows Forms.
ΡΡΠΎΡ Π±Π»ΠΎΠ³ (ΠΏΠΎΡΠ΅ΠΌΡ STAThread ΡΡΠ΅Π±ΡΠ΅ΡΡΡ?) ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±ΡΡΡΠ½ΡΠ΅Ρ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Ρ ΠΎΡΠΎΡΠΎ. ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ²Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ Π² Π£ΡΠΎΠ²Π΅Π½Ρ CLR, ΡΠΌ. ΡΡΠ° ΡΡΠ°ΡΡΡ ΠΆΡΡΠ½Π°Π»Π° MSDN Ρ ΠΈΡΠ½Ρ 2004 Π³ΠΎΠ΄Π° (ΠΡΡ ΠΈΠ², ΠΠΏΡΠ΅Π»Ρ. 2009).
Π§ΠΈΡΠ°ΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ Π·Π΄Π΅ΡΡ (ΠΡΡ ΠΈΠ²ΠΈΡΠΎΠ²Π°Π½ΠΎ, ΠΡΠ½Ρ 2009)
ΠΠ½ ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ, ΡΡΠΎ Π²Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΠ΅ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠ²Π°ΡΡΠΈΡΡ. ΠΡΠΎ Π·Π»Π°Ρ Π²Π΅ΡΡ COM, ΠΎΠ½Π° ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Windows Forms (GUI), ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Win32 Π΄Π»Ρ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ STA. ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΡΠΎ-ΡΠΎ, ΡΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠΎΠ΄Π΅Π»ΡΡ STA ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ², Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΠΏΠΎΠ²ΡΠ΅ΠΆΠ΄Π΅Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ.
Π²ΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠ·Π²Π°ΡΡ Π½Π° Gui ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° (Π΅ΡΠ»ΠΈ Π²Ρ ΡΠ΄Π΅Π»Π°Π»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΡΠΎΡΠΌΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ).
Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ, Π½Π΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡΠ΅ΡΡ ΠΎΠ± ΡΡΠΎΠΌ, ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΈΠΌΠΈΡΠ΅, ΡΡΠΎ ΠΠΎΡΠΎΠΊΠΈ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Windows Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Ρ ΠΊΠ°ΠΊ STA, ΠΈΠ½Π°ΡΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡ ΡΡΡΠ°Π½Π½ΡΠ΅ Π²Π΅ΡΠΈ.
Π Π°Π±ΠΎΡΠ° Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ Π² C#
Π§Π°ΡΡΡ 2
ΠΠ²ΡΠΎΡ: Joseph Albahari
ΠΠ΅ΡΠ΅Π²ΠΎΠ΄: ΠΠ»Π΅ΠΊΡΠ΅ΠΉ ΠΠΈΡΡΡΠΊΠΈΠ½
The RSDN Group
ΠΡΡΠΎΡΠ½ΠΈΠΊΠΈ: Threading in C#
Π±Π°Π·ΠΈΡΡΠ΅ΡΡΡ Π½Π° ΠΊΠ½ΠΈΠ³Π΅
Joseph Albahari Ben Albahari «C# 3.0 in a Nutshell»
ΠΠ°ΡΠ΅ΡΠΈΠ°Π» ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ»: RSDN Magazine #2-2007
ΠΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ: 27.06.2007
ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ: 15.04.2009
ΠΠ΅ΡΡΠΈΡ ΡΠ΅ΠΊΡΡΠ°: 1.0
3. Π Π°Π±ΠΎΡΠ° Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ
ΠΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΡ ΠΈ Windows Forms
ΠΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½Ρ β Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ βΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρβ Π΄Π»Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΡ Π±ΡΠ²Π°ΡΡ Π΄Π²ΡΡ Π²ΠΈΠ΄ΠΎΠ² β βsingleβ (ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠ΅) ΠΈ βmultiβ (ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠ΅). ΠΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠΉ Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ, ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠΉ β Π»ΡΠ±ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ°ΡΠ΅ ΠΈ ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»ΡΡΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ.
ΠΠΎΠΎΠ±ΡΠ°Π·ΠΈΡΠ΅ ΡΠ΅Π±Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΊΠ½ΠΈΠ³Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΡΠ½ΠΎΡΠΈΡΡ ΠΊΠ½ΠΈΠ³ΠΈ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π΅Π»ΡΠ·Ρ, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΡΠ°Π²Π°ΡΡΡΡ ΡΠ°ΠΌ Π²ΡΡ ΠΆΠΈΠ·Π½Ρ. ΠΠΎΠ±Π°Π²ΠΈΠΌ ΡΡΠ΄Π° ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°-ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π²ΠΎΠΉΡΠΈ Π»ΡΠ±ΠΎΠΌΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΡ, Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ. ΠΡΠ»ΠΈ Π»ΡΠ΄Π΅ΠΉ Π±ΠΎΠ»ΡΡΠ΅ β ΠΏΠ΅ΡΠ΅Π΄ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°-Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½Ρ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΉ ΡΡΠ°Ρ β ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΡ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈΠ»ΠΈ ΡΠ΅Π»ΡΡ Π³ΡΡΠΏΠΏΡ Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ. ΠΠΈΠΊΡΠΎ, ΠΊΡΠΎΠΌΠ΅ ΡΡΠ°ΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ΅ΠΉ, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠΉΡΠΈ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ. ΠΠ»ΠΈΠ΅Π½Ρ, ΠΆΠ΅Π»Π°ΡΡΠΈΠΉ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΡΠΈΠ³Π½Π°Π»ΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΡ, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΠΏΡΠΎΡΠΈΡΡ Π΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π·Π°Π΄Π°Π½ΠΈΠ΅! ΠΡΠ·ΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΡ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ°ΡΡΠ°Π»ΠΈΠ½Π³ΠΎΠΌ β ΠΊΠ»ΠΈΠ΅Π½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΌΠ°ΡΡΠ°Π»ΠΈΠ½Π³ ΡΠ²ΠΎΠ΅Π³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ°ΡΠ½ΠΎΠΌΡ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΡ. ΠΠ°ΡΡΠ°Π»ΠΈΠ½Π³ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΏΡΠΎΠΊΠ°ΡΠΊΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ β Π² Windows Forms ΡΡΠΎΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΡΠ»Π΅Π΄ΠΈΡ Π·Π° ΡΠΎΠ±ΡΡΠΈΡΠΌΠΈ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ ΠΈ ΠΌΡΡΠΈ ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΡΠ»ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π΅ ΡΡΠΏΠ΅Π²Π°Π΅Ρ Π·Π° Π½ΠΎΠ²ΡΠΌΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΠ°Ρ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΡ.
ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΠ°
ΠΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ Π·Π°ΠΏΡΠΎΡΠΈΡΡ, ΡΡΠΎΠ±Ρ Π³Π»Π°Π²Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π²ΠΎΡΠ΅Π» Π² ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠΉ Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π°ΡΡΠΈΠ±ΡΡ STAThread Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄Π° main :
Control.Invoke
BackgroundWorker
BackgroundWorker β ΠΊΠ»Π°ΡΡ-ΠΎΠ±Π΅ΡΡΠΊΠ° ΠΈΠ· ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ System.ComponentModel Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ. ΠΠ½ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ:
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π΄Π²Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ β ΠΎΠ½ΠΈ ΠΎΠ·Π½Π°ΡΠ°ΡΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ try/catch Π² ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Control.Invoke.
BackgroundWorker ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΡΠ» ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΡΡΠΎΠ±Ρ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈΡ ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΡΡ Π½ΠΎΠ²ΡΡ Π·Π°Π΄Π°ΡΡ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π½Π΅Π»ΡΠ·Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ Abort Π΄Π»Ρ ΠΏΠΎΡΠΎΠΊΠ° BackgroundWorker.
ΠΠΎΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ BackgroundWorker :
Π§ΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ:
ΠΠΎΠ΄ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ ProgressChanged ΠΌΠΎΠΆΠ΅Ρ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ UI ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² RunWorkerCompleted. ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ° ΠΏΡΠΎΠ³ΡΠ΅ΡΡΠ°.
Π§ΡΠΎΠ±Ρ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΠΌΠ΅Π½Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ:
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ ΠΎΠ±Π΅ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ:
ΠΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ (Enter Π½Π°ΠΆΠ°Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ BackgroundWorker):
ΠΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ (ΡΠ°Π±ΠΎΡΠ° BackgroundWorker Π½Π΅ ΠΏΡΠ΅ΡΡΠ²Π°Π»Π°ΡΡ):
ΠΠ°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡ BackgroundWorker
ΠΠΎΠΆΠ½ΠΎ ΡΠ΅ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ BackgroundWorker Ρ ΠΎΡΠΎΠ½ΠΈΡ ΡΡΠ°ΡΡΡ βΠ°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΡ Π½Π° ΡΠΎΠ±ΡΡΠΈΡΡ β.
ReaderWriterLock
ΠΠ±ΡΡΠ½ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΡΠΈΠΏΠΎΠ² ΠΏΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½Ρ ΠΏΡΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ ΡΡΠ΅Π½ΠΈΡ, Π½ΠΎ Π½Π΅ ΠΏΡΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡΡ , ΠΈΠ»ΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΌ ΡΡΠ΅Π½ΠΈΠΈ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ. Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎ Π΄Π»Ρ ΡΠ΅ΡΡΡΡΠΎΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΉΠ»ΠΎΠ². ΠΡΠ»ΠΈ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ·ΡΠ΅Π΄ΠΊΠ° β Π·Π°ΠΏΠΈΡΡ, Π·Π°ΡΠΈΡΠ° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΡΠ°ΠΊΠΈΡ ΡΠΈΠΏΠΎΠ² ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΊΡΠΊΠ»ΡΠ·ΠΈΠ²Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠ΅ΠΆΠΈΠΌΠΎΠ² Π΄ΠΎΡΡΡΠΏΠ° ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ΠΎΠ±ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΊΡΡΠΈΡΡΡΡΡΡ Π² ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΠΎΠ»ΡΡ Π΄Π»Ρ Π±ΡΡΡΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ°. ΠΠ»Π°ΡΡ ReaderWriterLock ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄ ΡΠ°ΠΊΠΎΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΡΠ°Π±ΠΎΡΡ.
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΠ°ΡΡΡΡΡ ΡΠ΅ΡΡΡΠ΅ ΠΏΠΎΡΠΎΠΊΠ° β ΠΎΠ΄ΠΈΠ½ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² ΡΠΏΠΈΡΠΎΠΊ, Π΄ΡΡΠ³ΠΎΠΉ ΠΈΡ ΡΠ΄Π°Π»ΡΠ΅Ρ, Π° Π΄Π²Π° ΠΎΡΡΠ°Π²ΡΠΈΡ ΡΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΡΠΎΠΎΠ±ΡΠ°ΡΡ ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΡΠΏΠΈΡΠΊΠ΅. ΠΠ΅ΡΠ²ΡΠ΅ Π΄Π²Π° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ Π½Π° Π·Π°ΠΏΠΈΡΡ, Π΄Π²Π° ΠΎΡΡΠ°Π²ΡΠΈΡ ΡΡ β ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅. ΠΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ°ΠΉΠΌΠ°ΡΡ Π² 10 ΡΠ΅ΠΊΡΠ½Π΄ (ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΎΠΏΡΡΠ΅Π½Π° Π΄Π»Ρ ΠΊΡΠ°ΡΠΊΠΎΡΡΠΈ).
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΡΠΏΠΈΡΠΎΠΊ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅, Π² ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π² ΠΌΠ΅ΡΠΎΠ΄ AppendItem Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π²ΡΠ·ΠΎΠ² SpinWait Π΄Π»Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π±Π°Π»Π°Π½ΡΠ°.
ΠΡΠ»Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ²
ΠΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠ»Π° ΠΏΠΎΡΠΎΠΊΠΎΠ² Π½ΡΠΆΠ½ΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ WaitHandle ΠΈ Π΄Π΅Π»Π΅Π³Π°Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½, ΠΊΠΎΠ³Π΄Π° WaitHandle Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½. ΠΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ThreadPool.RegisterWaitForSingleObject, ΠΊΠ°ΠΊ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅:
ΠΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ (ΠΏΠΎΡΠ»Π΅ ΠΏΡΡΠΈΡΠ΅ΠΊΡΠ½Π΄Π½ΠΎΠΉ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ):
Π Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ WaitHandle ΠΈ Π΄Π΅Π»Π΅Π³Π°ΡΡ RegisterWaitForSingleObject ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ-βΡΠ΅ΡΠ½ΡΠΉ ΡΡΠΈΠΊβ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ Π² Π²Π°Ρ Π΄Π΅Π»Π΅Π³Π°Ρ (ΠΊΠ°ΠΊ ΡΡΠΎ Π±ΡΠ»ΠΎ Π΄Π»Ρ ParameterizedThreadStart ), ΡΠ°ΠΉΠΌΠ°ΡΡ Π² ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π°Ρ (-1, Π΅ΡΠ»ΠΈ ΡΠ°ΠΉΠΌΠ°ΡΡ Π½Π΅ Π½ΡΠΆΠ΅Π½) ΠΈ ΡΠ»Π°Π³, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π°ΠΏΡΠΎΡ ΠΎΠ΄Π½ΠΎΡΠ°Π·ΠΎΠ²ΡΠΌ ΠΈΠ»ΠΈ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΠΌΡΡ.
ΠΡΠ·ΠΎΠ² Abort Π΄Π»Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΏΡΠ»Π° β ΡΡΠΎ ΡΠΎΠΆΠ΅ ΠΏΠ»ΠΎΡ Π°Ρ ΠΈΠ΄Π΅Ρ. ΠΠΎΡΠΎΠΊΠΈ ΠΏΡΠ»Π° Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΉ ΠΆΠΈΠ·Π½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π² ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ Π½ΡΠΆΠ½ΡΠΌΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ, ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ Go ΡΡΠ΅Π±ΡΠ΅Ρ Π΄Π²Π° ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΠΡΡΠ³ΠΎΠΉ ΠΏΡΡΡ Π² ΠΏΡΠ» ΠΏΠΎΡΠΎΠΊΠΎΠ² β ΡΠ΅ΡΠ΅Π· Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ Π΄Π΅Π»Π΅Π³Π°ΡΡ.
ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ Π΄Π΅Π»Π΅Π³Π°ΡΡ
Π ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠ°ΡΡΠΈ Π±ΡΠ»ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΏΠΎΡΠΎΠΊ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ParameterizedThreadStart. ΠΠ½ΠΎΠ³Π΄Π° ΠΆΠ΅ Π½ΡΠΆΠ½ΠΎ, Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, Π²Π΅ΡΠ½ΡΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠ°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π·Π°Π²Π΅ΡΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ Π΄Π΅Π»Π΅Π³Π°ΡΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π² ΠΎΠ±ΠΎΠΈΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΡ Π»ΡΠ±ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΠΌ ΠΈΡ ΡΠΈΠΏΠ°. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ· Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ Π΄Π΅Π»Π΅Π³Π°ΡΠΎΠ² ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠ΅ΡΠ΅Π±ΡΠ°ΡΡΠ²Π°ΡΡΡΡ Π² ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΈ, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π½Π΅ ΡΡΠ΅Π±ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ. ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ Π΄Π΅Π»Π΅Π³Π°ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΏΡΡΡ ΠΊ ΠΏΡΠ»Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ².
Π¦Π΅Π½Π°, ΠΊΠΎΡΠΎΡΡΡ Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΏΠ»Π°ΡΠΈΡΡ β Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ. Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΡΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΠ½Π°ΡΠ°Π»Π° ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΎΠ±ΡΡΠ½ΡΡ, ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Π½ΡΠΆΠ½ΠΎ ΡΡΠ°Π²Π½ΠΈΡΡ Π΄Π²Π΅ web-ΡΡΡΠ°Π½ΠΈΡΡ. ΠΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΊΠ°ΠΆΠ΄ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ, Π° Π·Π°ΡΠ΅ΠΌ ΡΡΠ°Π²Π½ΠΈΡΡ ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
ΠΠΎΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ Π΄Π΅Π»Π΅Π³Π°ΡΡ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π΄Π²ΡΡ web-ΡΡΡΠ°Π½ΠΈΡ, Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π΄ΡΡΠ³ΠΈΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ:
ΠΡ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄Π΅Π»Π΅Π³Π°ΡΠΎΠ² Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΎΡΠΈΠΌ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ. Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½Π°ΠΌ Π½ΡΠΆΠ½Ρ Π΄Π²Π° Π΄Π΅Π»Π΅Π³Π°ΡΠ° β ΠΊΠ°ΠΆΠ΄ΡΠΉ Π΄Π»Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° WebClient ( WebClient Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ°, Π΅ΡΠ»ΠΈ Π±Ρ ΡΡΠΎ Π±ΡΠ»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π±Ρ ΠΎΠ΄ΠΈΠ½ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ Π΄Π΅Π»Π΅Π³Π°Ρ).
ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ
Π‘ΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΈΠ·Π±Π΅Π³Π°ΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ ΠΏΠΈΡΠ΅ΡΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ², ΠΏΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ:
ΠΡΠ»ΠΈ Π²Π°ΠΌ ΠΏΡΠΎΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Π»ΡΡΡΠ΅ Π²ΡΠ·ΠΎΠ²ΠΈΡΠ΅ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ Π²Π΅ΡΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ NetworkStream.Read ) ΡΠ΅ΡΠ΅Π· Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ Π΄Π΅Π»Π΅Π³Π°Ρ. ΠΡΡΠ³Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ThreadPool.QueueUserWorkItem ΠΈΠ»ΠΈ BackgroundWorker β Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ.
ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ
Π’Π°ΠΉΠΌΠ΅ΡΡ
Π’Π°ΠΉΠΌΠ΅Ρ Windows Forms ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ Π·Π°Π΄Π°Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΠΈ ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΡΡΡΡΠΎ. ΠΡΡΡΡΠΎΡΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²Π°ΠΆΠ½Π°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠΎΠ±ΡΡΠΈΠ΅ Tick Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅, Π° Π·Π½Π°ΡΠΈΡ, Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π½Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
ΠΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΎΠ±Π»Π°ΡΡΡ Π΄Π°Π½Π½ΡΡ , ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΎΡ Π²ΡΠ΅Ρ Π΄ΡΡΠ³ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΡΠΈΠΏΠ° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ ΠΈΠ»ΠΈ ΡΠΎΠΊΠ΅Π½ΠΎΠ² Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ. ΠΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΡΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π±ΡΠ»ΠΎ Π±Ρ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π½Π΅ΡΠ΄ΠΎΠ±Π½ΠΎ, Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΆΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π² ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΠΎΠ»ΡΡ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ Π΅Π΅ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ².
ΠΠ΅ΡΠΎΠ΄ Thread.GetData ΡΠΈΡΠ°Π΅Ρ ΠΈΠ· ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π΄Π°Π½Π½ΡΡ ΠΏΠΎΡΠΎΠΊΠ°, Thread.SetData ΠΏΠΈΡΠ΅Ρ Π² Π½Π΅Π΅. ΠΠ±Π° ΠΌΠ΅ΡΠΎΠ΄Π° ΡΡΠ΅Π±ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡ LocalDataStoreSlot (Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±Π΅ΡΡΠΊΠ° Π΄Π»Ρ ΡΡΡΠΎΠΊΠΈ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡΠ»ΠΎΡΠ°) Π΄Π»Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ»ΠΎΡΠ°. ΠΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡ LocalDataStoreSlot ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ ΠΈΠ· Π»ΡΠ±ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠΌ ΡΠ²ΠΎΠΈΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ . ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ:
4. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ
ΠΠ΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ°Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ
ΠΡΠΎΠΌΠ°ΡΠ½ΠΎΡΡΡ ΠΈ Interlocked
ΠΠ½ΡΡΡΡΠΊΡΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎΠΉ, Π΅ΡΠ»ΠΈ ΠΎΠ½Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½Π°Ρ, Π½Π΅Π΄Π΅Π»ΠΈΠΌΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°. Π‘ΡΡΠΎΠ³Π°Ρ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎΡΡΡ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΡΠ΅Ρ Π»ΡΠ±ΠΎΠΉ ΠΏΠΎΠΏΡΡΠΊΠ΅ Π²ΡΡΠ΅ΡΠ½Π΅Π½ΠΈΡ. Π C# ΠΏΡΠΎΡΡΠΎΠ΅ ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Ρ Π² 32 Π±ΠΈΡΠ° ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π°ΡΠΎΠΌΠ°ΡΠ½ΡΠΌ (Π΄Π»Ρ 32-Π±ΠΈΡΠ½ΡΡ CPU). ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΠΏΠΎΠ»ΡΠΌΠΈ Π½Π΅ Π°ΡΠΎΠΌΠ°ΡΠ½Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ²Π»ΡΡΡΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠ΅ΠΉ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΠ΅Π½ΠΈΡ/Π·Π°ΠΏΠΈΡΠΈ:
Π§ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΏΠΈΡΡ 64-Π±ΠΈΡΠ½ΡΡ ΠΏΠΎΠ»Π΅ΠΉ Π½Π΅ Π°ΡΠΎΠΌΠ°ΡΠ½Ρ Π½Π° 32-Π±ΠΈΡΠ½ΡΡ CPU, ΡΠ°ΠΊ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π²Π° 32-Π±ΠΈΡΠ½ΡΡ ΡΡΠ°ΡΡΠΊΠ° ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠ»ΠΈ ΠΏΠΎΡΠΎΠΊ A ΡΠΈΡΠ°Π΅Ρ 64-Π±ΠΈΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΠΏΠΎΡΠΎΠΊ B ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ Π΅Π³ΠΎ, ΠΏΠΎΡΠΎΠΊ A ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π±ΠΈΡΠΎΠ²ΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΈΠ· ΡΡΠ°ΡΠΎΠ³ΠΎ ΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
Π£Π½Π°ΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΡΠΈΠΏΠ° x++ ΡΠ½Π°ΡΠ°Π»Π° ΡΠΈΡΠ°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, Π·Π°ΡΠ΅ΠΌ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π΅Π΅, Π° ΠΏΠΎΡΠΎΠΌ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠ»Π°ΡΡ:
ΠΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡΡΠ΅ΠΉ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ°ΠΊΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ β ΠΎΠ±Π΅ΡΠ½ΡΡΡ Π½Π΅Π°ΡΠΎΠΌΠ°ΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π² Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ. ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΡΠ΅Ρ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎΡΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΊΠ»Π°ΡΡ Interlocked ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΈ Π±ΡΡΡΡΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΡΠΎΡΡΡΡ Π°ΡΠΎΠΌΠ°ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ:
ΠΠ°ΡΡΠ΅ΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π°Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΠΈΠ²ΠΎΡΡΡ (volatility)
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠ»Π°ΡΡ:
ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π²ΠΎΠΏΡΠΎΡ: Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½Π°Ρ Π·Π°Π΄Π΅ΡΠΆΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ «ΠΠΎΠ½Π΅ΡΠ»Π°ΡΡ. » ΠΎΡ «ΠΠΎΡΠΎΠ²ΠΎ» β Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΌΠΎΠΆΠ΅Ρ Π»ΠΈ ΡΠΈΠΊΠ» Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ Wait ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΠΊΡΡΡΠΈΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠ»Π°Π³ endIsNigh Π±ΡΠ» ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π² true? Π Π΅ΡΠ΅, ΠΌΠΎΠΆΠ΅Ρ Π»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ Wait Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°ΡΡ «ΠΠΎΡΠΎΠ²ΠΎ, false»?
ΠΡΠ²Π΅Ρ Π½Π° ΠΎΠ±Π° Π²ΠΎΠΏΡΠΎΡΠ° β ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈ Π΄Π°, ΠΌΠΎΠΆΠ΅Ρ, Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅, Π΅ΡΠ»ΠΈ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π½Π°Π·Π½Π°ΡΠΈΡ ΡΡΠΈ Π΄Π²Π° ΠΏΠΎΡΠΎΠΊΠ° Π½Π° ΡΠ°Π·Π½ΡΠ΅ CPU. ΠΠΎΠ»Ρ repented ΠΈ endIsNigh ΠΌΠΎΠ³ΡΡ ΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡΠ°Ρ CPU Π΄Π»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π½Π°Π·Π°Π΄ Π² ΠΏΠ°ΠΌΡΡΡ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ Π·Π°Π΄Π΅ΡΠΆΠΊΠΎΠΉ. Π ΠΏΠΎΡΡΠ΄ΠΎΠΊ, Π² ΠΊΠ°ΠΊΠΎΠΌ ΡΠ΅Π³ΠΈΡΡΡΡ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π² ΠΏΠ°ΠΌΡΡΡ, Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Ρ Ρ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ.
ΠΡΠΎ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Thread.VolatileRead ΠΈ Thread.VolatileWrite Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠΎΠ»Π΅ΠΉ. VolatileRead β ΡΡΠΎ ΡΠΏΠΎΡΠΎΠ± βΡΠΈΡΠ°ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅β; VolatileWrite ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ βΠ·Π°ΠΏΠΈΡΠ°ΡΡ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π² ΠΏΠ°ΠΌΡΡΡβ. Π’ΠΎΠ³ΠΎ ΠΆΠ΅ ΡΡΡΠ΅ΠΊΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡΠΈΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ·ΡΡΠ½ΠΎ, ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ»Π΅ΠΉ Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ volatile :
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° lock Π±ΡΠ»ΠΎ Π±Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠΎΠ»ΡΠΌ repented ΠΈ endIsNigh Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΡΠΎ-ΡΠΎ ΡΠΈΠΏΠ° ΡΠ°ΠΊΠΎΠ³ΠΎ:
Wait ΠΈ Pulse
Π Π°Π½Π΅Π΅ ΠΌΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»ΠΈ EventWaitHandle β ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΈΠ³Π½Π°Π»ΡΠ½ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΎΡΠΎΠΊΠ° Π΄ΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ ΠΎΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°.
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Wait ΠΈ Pulse β ΡΠΊΡΠ΄Π½Π°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ. Π ΡΡΠΎ Π΅ΡΠ΅ Ρ ΡΠΆΠ΅, Wait ΠΈ Pulse ΠΈΡΠΏΡΡΡΠ²Π°ΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΠ΅ ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ Π΄ΠΈΠ»Π΅ΡΠ°Π½ΡΠ°ΠΌ: Π΅ΡΠ»ΠΈ Π²Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅ ΠΈΡ Π±Π΅Π· ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ, ΠΎΠ½ΠΈ ΡΡΠΎ ΡΠ·Π½Π°ΡΡ β ΠΈ Π±ΡΠ΄ΡΡ ΡΡΠ°ΡΡΠ»ΠΈΠ²Ρ Π½Π°ΠΉΡΠΈ ΠΈ Π·Π°ΠΌΡΡΠ°ΡΡ Π²Π°Ρ Π΄ΠΎ ΡΠΌΠ΅ΡΡΠΈ! Π ΡΡΠ°ΡΡΡΡ, Π΅ΡΡΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΎΠ±ΡΠ°Π·Π΅Ρ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ, ΠΈ ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅.
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Wait ΠΈ Pulse
ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Wait ΠΈ Pulse β ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΈΠ³Π½Π°Π»ΡΠ½ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ: Wait Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΎ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°, Pulse ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΡΠΎ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ x ΠΎΠ±ΡΡΠ²Π»Π΅Π½ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π·Π°Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊ Π½Π° Π²ΡΠ·ΠΎΠ²Π΅ Monitor.Wait :
Π ΡΡΠΎΡ ΠΊΠΎΠ΄ (Π΅ΡΠ»ΠΈ ΠΎΠ½ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ ΠΏΠΎΠ·ΠΆΠ΅ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅) ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ:
ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ
Π§ΡΠΎΠ±Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΡΡ ΡΠ°Π±ΠΎΡΡ, Monitor.Wait Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ ΠΈΠ»ΠΈ ΠΎΡΠΊΠ»ΡΡΠ°Π΅Ρ Π±Π°Π·ΠΎΠ²ΡΠΉ lock Π½Π° Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, ΡΡΠΎΠ±Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ (ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ Pulse ) ΡΠΎΠΆΠ΅ ΠΌΠΎΠ³ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ. ΠΠ΅ΡΠΎΠ΄ Wait ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΏΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ΄Π°:
Wait Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ²ΡΠΉ Π²ΡΠ·ΠΎΠ² Monitor.Enter Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ.
Π‘ΠΈΠ³Π½Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ
ΠΠ°ΠΆΠ½Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ Monitor.Pulse β ΡΡΠΎΡ Π²ΡΠ·ΠΎΠ² Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ, Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΡ Π·Π°Π΄Π΅ΡΠΆΠ΅ΠΊ. ΠΡΠ»ΠΈ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ ΠΆΠ΄Π΅Ρ Π½Π° ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅, ΠΎΠ½ ΠΏΠΎΠ»ΡΡΠΈΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ Π½Π΅Ρ, Π²ΡΠ·ΠΎΠ² Pulse Π±ΡΠ΄Π΅Ρ ΡΠΈΡ ΠΎ ΠΏΡΠΎΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½.
Pulse ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΡΡΠΎΡΠΎΠ½Π½ΡΡ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡ Π² Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΠΎΠΆΠΈΠ΄Π°ΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°. ΠΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. Pulse Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠ΅Π³ΠΎ, Π±ΡΠ» Π»ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ ΡΠΈΠ³Π½Π°Π»ΡΠ½ΡΠΉ ΠΈΠΌΠΏΡΠ»ΡΡ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠΎΠ³Π΄Π° ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΠΏΠΎΡΠ»Π΅Ρ ΡΠΈΠ³Π½Π°Π» ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ, Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π³Π°ΡΠ°Π½ΡΠΈΠΉ, ΡΡΠΎ ΠΆΠ΄ΡΡΠΈΠΉ ΡΠΈΠ³Π½Π°Π»Π° ΠΏΠΎΡΠΎΠΊ Π²Π΅ΡΠ½Π΅ΡΡΡ ΠΊ ΠΆΠΈΠ·Π½ΠΈ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½Π°Ρ Π·Π°Π΄Π΅ΡΠΆΠΊΠ°, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΠ°Ρ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠ², Π² ΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Π½Π΅ Π²Π»Π°Π΄Π΅Π΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ. ΠΡΠΎ Π΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ Π·Π°ΡΡΡΠ΄Π½ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΠ³Π΄Π° ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π² Π²ΠΈΠ΄Π΅ ΡΠ»Π°Π³Π°.
ΠΠΎΠ»Π°Π³Π°ΡΡΡ Π½Π° ΡΠ²ΠΎΠ΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎΡΠΎΠΊΠ°, ΠΎΠΆΠΈΠ΄Π°ΡΡΠ΅Π³ΠΎ ΡΠΈΠ³Π½Π°Π»Π°, Π±Π΅Π· ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ Π²Ρ ΠΏΡΠΎΠΈΠ³ΡΠ°Π΅ΡΠ΅!
ΠΡΠ΅ΡΠ΅Π΄Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΈ PulseAll
ΠΡΠ·Π²Π°ΡΡ Wait Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈ ΡΠΎΠΌ ΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ ΠΌΠΎΠ³ΡΡ ΡΡΠ°Π·Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² β Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π·Π° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, «waiting queue» (Π½Π΅ ΠΏΡΡΠ°ΡΡ c ΠΎΡΠ΅ΡΠ΅Π΄ΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π½Π° lock β «ready queue»). ΠΠ°ΠΆΠ΄ΡΠΉ Pulse ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ ΠΈΠ· Π³ΠΎΠ»ΠΎΠ²Ρ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, «waiting queue», ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΎΠ½ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ ΠΊ «ready queue» Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ. ΠΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠ°ΡΠΊΠΎΠ²ΠΊΠΎΠΉ Π΄Π»Ρ ΠΌΠ°ΡΠΈΠ½ β ΡΠ½Π°ΡΠ°Π»Π° Π²Ρ ΡΡΠΎΠΈΡΠ΅ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΊ Π°Π²ΡΠΎΠΌΠ°ΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π±ΠΈΠ»Π΅ΡΠΎΠ² («waiting queue»), Π° ΠΏΠΎΡΠΎΠΌ ΠΆΠ΄Π΅ΡΠ΅ ΡΠ½ΠΎΠ²Π° ΠΏΠ΅ΡΠ΅Π΄ ΡΠ»Π°Π³Π±Π°ΡΠΌΠΎΠΌ Π½Π° Π²Ρ ΠΎΠ΄Π΅ («ready queue»).
Π ΠΈΡΡΠ½ΠΎΠΊ 2: Waiting Queue ΠΈ Ready Queue
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Pulse ΠΈ Wait
ΠΡΠ°ΠΊ, Π½Π°ΡΠ½Π΅ΠΌ. Π Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° ΡΡΠ»ΠΎΠ²ΠΈΠΌΡΡ ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ:
ΠΠΌΠ΅Ρ Π² Π²ΠΈΠ΄Ρ ΡΡΠΈ Π΄Π²Π° ΠΏΡΠ°Π²ΠΈΠ»Π°, ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ: ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎΡ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°:
ΠΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Main, ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΠΈΠΉ Π²ΡΠ΅ ΡΡΠΎ Π² Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅:
Π’Π΅ΠΏΠ΅ΡΡ Π·Π°ΠΏΡΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΎΠ½ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΠΎΡ ΡΡΠΎ ΠΎΠ½ Π²ΡΠ²ΠΎΠ΄ΠΈΡ:
ΠΠΎΡ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ, Ρ ΠΎΠΏΡΡΠ΅Π½Π½ΡΠΌΠΈ Π΄Π»Ρ ΠΊΡΠ°ΡΠΊΠΎΡΡΠΈ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ Console :
ΠΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Wait ΠΈ Pulse
Π’Π΅ΠΏΠ΅ΡΡ Π²ΡΡΠ°Π²ΠΈΠΌ Π² Π½Π°Ρ ΡΠ°Π±Π»ΠΎΠ½ Wait ΠΈ Pulse ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² ΠΏΡΠΎΡΠ»ΡΠΉ ΡΠ°Π·:
ΠΠΎΡ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ΄:
ΠΠ°ΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅, ΡΡΠΎ Pulse Π½Π΅ ΠΏΡΠΈΠ½ΡΠΆΠ΄Π°Π΅Ρ ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΠΊ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π‘ΠΊΠΎΡΠ΅Π΅ Pulse ΡΠΎΠ»ΡΠΊΠΎ ΡΠ²Π΅Π΄ΠΎΠΌΠ»ΡΠ΅Ρ Π΅Π³ΠΎ, ΡΡΠΎ ΠΊΠΎΠ΅-ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ, ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ ΠΏΠ΅ΡΠ΅ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ. ΠΠ΅ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ, Π° ΡΠ°ΠΌ ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ (Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΈΠΊΠ»Π°), Π½ΡΠΆΠ½ΠΎ Π»ΠΈ Π΅ΠΌΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΈΠ»ΠΈ ΠΎΡΡΠ°ΡΡΡΡ Π² Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ. ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° β Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π±Π΅Π· Π·Π°ΠΌΡΡΠ»ΠΎΠ²Π°ΡΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ.
ΠΡΠ΅ΡΠ΅Π΄Ρ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊ/ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΡΠΎΠΊΠ°. Π ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π·Π°Π΄Π°Ρ Π±ΡΠ΄Π΅Ρ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠ°ΠΊΠΎΠΉ:
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ², Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π΅ΡΠ½ΡΡΡ Π² lock Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΠΈ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ. Π’Π°ΠΊ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΏΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ:
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π³ β ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠ΄Π°Π»ΡΠ΅Ρ Π·Π°Π΄Π°ΡΡ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π΅Ρ:
Π’ΠΎ, ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌ: Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΆΠ΅ ΡΡΡΠ°ΡΠ΅Π²ΡΠ΅ΠΉ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½Π° Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΈ lock. ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅, ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ, Π΅ΡΠ»ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π²Π° ΠΏΠΎΡΠΎΠΊΠ°-ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Ρ ΠΎΠ΄Π½ΠΈΠΌ-Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ Π½Π΅ Π²ΠΎΡΠ΅Π» Π±Ρ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π² ΡΠΈΠΊΠ»Π΅ β ΠΎΠ±Π° ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ Π±Ρ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΎΠ΄ΠΈΠ½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ. ΠΠ°Π»Π΅Π΅ ΠΎΠ½ΠΈ ΠΎΠ±Π° ΠΏΠΎΠΏΡΡΠ°Π»ΠΈΡΡ Π±Ρ ΡΠ΄Π°Π»ΠΈΡΡ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΡΠΎΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠ΅ΠΉ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π² ΠΏΠΎΡΠΎΠΊΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π²ΡΠΎΡΡΠΌ. ΠΠ»Ρ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΠΈ Π±ΡΠ΄Π΅ΠΌ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ lock Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ»ΡΡΠ΅ β Π΄ΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΎΡΠ΅ΡΠ΅Π΄ΡΡ:
(ΠΠ΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡ Pulse ΠΏΠΎΡΠ»Π΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ ΠΈΠΌΠ΅ΡΡΠΈΠΌΠΈΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ).
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°Π΄Π°ΡΠ° ΡΠ΄Π°Π»Π΅Π½Π° ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΡΠΈΡΠΈΠ½ ΡΠΎΡ ΡΠ°Π½ΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ. Π‘Π½ΡΡΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π² ΡΡΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ Π·Π°Π΄Π°ΡΡ Π±Π΅Π· Π½Π΅Π½ΡΠΆΠ½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΡΡΠ³ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ².
Π ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π½Π°ΡΠΈΠΌ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π΅ΡΠ»ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ PulseAll ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Wait Π½Π° ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ, ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠΎΡ ΠΆΠ΅ ΡΠ°ΠΌΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
ΠΡΠΎ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ ΡΠΈΠ³Π½Π°Π»ΠΎΠ²
ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ Π΅ΡΠ΅ ΡΠ°Π· Π½Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ:
ΠΠΎΠΎΠ±ΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ, ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡΡ Π½Π° Π²ΡΠ΄Π°ΡΠ΅ ΡΠΈΠ³Π½Π°Π»ΠΎΠ², ΡΠΈΠ³Π½Π°Π»Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ:
Π‘ΡΠΊΠΎΠ½ΠΎΠΌΠΈΠΌ ΠΌΡ, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²ΡΠ΄Π°ΡΠ° ΡΠΈΠ³Π½Π°Π»Π° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΌΠ΅Π½Π΅Π΅ ΠΌΠΈΠΊΡΠΎΡΠ΅ΠΊΡΠ½Π΄Ρ ΠΈ Π½Π΅ Π²Π»Π΅ΡΠ΅Ρ Π·Π° ΡΠΎΠ±ΠΎΠΉ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΡ ΡΠ°ΡΡ ΠΎΠ΄ΠΎΠ² Π΄Π»Ρ Π·Π°Π½ΡΡΡΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Π΅ΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ ΡΡΠΎΡ ΡΠΈΠ³Π½Π°Π» Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΈΠ³Π½ΠΎΡΠΈΡΡΡΡ. ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΎΠΉ Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π±ΡΠ΄Π΅Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π»ΡΠ±ΠΎΠΉ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ: ΠΏΠ»ΠΎΡ ΠΎ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡΠΉ Π΄Π΅ΡΠ΅ΠΊΡ ΠΈΠ·-Π·Π° Π³Π»ΡΠΏΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ β ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ΅Π½Π° Π·Π° ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠΈΠΊΡΠΎΡΠ΅ΠΊΡΠ½Π΄Ρ! ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π²Π½Π΅ΡΠ΅Π½ΠΈΡ Π±Π»ΡΠΆΠ΄Π°ΡΡΠ΅ΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ ΡΠΈΠΏΠ° βΠ·Π°ΡΡΡΡΠ²ΡΠΈΠΉ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρβ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°Π²Π΅ΡΠ½ΡΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΡΠ²Π»Π΅Π½Π° ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠΌ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ (Π½Π°ΠΉΠ΄ΠΈ ΠΎΠ΄Π½ΠΎ ΠΎΡΠ»ΠΈΡΠΈΠ΅):
Π‘ΠΈΠ³Π½Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π±Π΅Π· Π²ΡΡΠΊΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ Π·Π°ΡΠΈΡΠΈΡ Π²Π°Ρ ΠΎΡ ΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΎΡΠΈΠ±ΠΎΠΊ.
Π‘ΠΠΠΠ’ Π‘ΠΎΠΌΠ½Π΅Π²Π°Π΅ΡΡΡΡ β ΡΠΈΠ³Π½Π°Π»Ρ! Π ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΠΎΠΌ ΡΠ°Π±Π»ΠΎΠ½Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅Π΄ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ²ΡΠ΅Π΄ΠΈΡΡ. Pulse ΠΈΠ»ΠΈ PulseAll? ΠΡΠΏΠΎΠΌΠ½ΠΈΠΌ ΠΎΡΠ»ΠΈΡΠΈΠ΅: ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Pulse ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠ±ΡΠ΄ΠΈΡΡΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ (ΠΈ ΠΏΠ΅ΡΠ΅ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² while ); Π² ΡΠ»ΡΡΠ°Π΅ PulseAll ΠΏΡΠΎΠ±ΡΠ΄ΡΡΡΡ Π²ΡΠ΅ ΠΆΠ΄ΡΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ (ΠΈ ΠΏΠ΅ΡΠ΅ΠΏΡΠΎΠ²Π΅ΡΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ). ΠΡΠ»ΠΈ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½Π° Π·Π°Π΄Π°ΡΠ°, Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π½ΡΠΆΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ, ΡΠ°ΠΊ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠ°Π·Π±ΡΠ΄ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ Pulse. ΠΡΠΎ ΠΏΠΎΡ ΠΎΠ΄ΠΈΡ Π½Π° ΠΊΠ»Π°ΡΡ ΡΠΏΡΡΠΈΡ Π΄Π΅ΡΠ΅ΠΉ β Π΅ΡΠ»ΠΈ Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΌΠΎΡΠΎΠΆΠ΅Π½ΠΎΠ΅, Π½Π΅Ρ ΡΠΌΡΡΠ»Π° Π±ΡΠ΄ΠΈΡΡ ΠΈΡ Π²ΡΠ΅Ρ ΠΈ ΡΡΠ°Π²ΠΈΡΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ. Π¦Π΅Π½Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π½Π΅Π²ΡΠ·Π²Π°Π½Π½ΠΎΠ³ΠΎ Pulse β Π·Π°ΡΡΡΡΠ²ΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ-ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ. ΠΡΠ° ΠΎΡΠΈΠ±ΠΊΠ° Π±ΡΠ΄Π΅Ρ Π±Π»ΡΠΆΠ΄Π°ΡΡΠ΅ΠΉ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²ΡΠ·ΠΎΠ² Pulse ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΡΡΡΠ΅ΠΊΡ, ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΈΡΠΈΡΡ Π½Π°Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ Π»ΠΎΠ·ΡΠ½Π³ βΠ‘ΠΎΠΌΠ½Π΅Π²Π°Π΅ΡΡΡΡ β ΡΠΈΠ³Π½Π°Π»Ρβ Π΄ΠΎ βΠ‘ΠΎΠΌΠ½Π΅Π²Π°Π΅ΡΡΡΡ β ΡΠΈΠ³Π½Π°Π»Ρ Π²ΡΠ΅ΠΌ!β ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ³Π΄Π° Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠΌΠ°ΡΡΠΎΠ² Π΄Π»Ρ WaitΠΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ»ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ Pulse Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅Π΅ ΠΌΠ΅ΡΠΎΠ΄, ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°ΡΡΠΈΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΡΠ»ΠΈ Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ β Π½Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΠΎΠ΅: ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ°ΠΉΠΌΠ°ΡΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ Wait ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ: Π£ΡΠ»ΠΎΠ²ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΏΡΠΎΠ²Π΅ΡΡΡΡΡΡ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎ Ρ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΎΠΌ, Π·Π°Π΄Π°Π½Π½ΡΠΌ Π² ΡΠ°ΠΉΠΌΠ°ΡΡΠ΅, Π° ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΏΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΠΈΠ³Π½Π°Π»Π°. Π§Π΅ΠΌ ΠΏΡΠΎΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, ΡΠ΅ΠΌ ΠΌΠ΅Π½ΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠΌΠ°ΡΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±Π΅Π· ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΠΊΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Ρ ΠΎΡΠΎΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π΅ΡΠ»ΠΈ ΡΠΈΠ³Π½Π°Π» Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΏΡΡΠ΅Π½ ΠΈΠ·-Π·Π° ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅! ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎΠΈΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΠ°ΠΉΠΌΠ°ΡΡ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ Wait Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ , Π³Π΄Π΅ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΠ»ΠΎΠΆΠ½Π° β Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΡΠ°Ρ ΠΎΠ²ΠΊΠΈ ΠΎΡ ΠΎΡΠΎΠ±ΠΎ Π·Π°Π³Π°Π΄ΠΎΡΠ½ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. Π’Π°ΠΊΠΆΠ΅ ΡΡΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΡ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌ, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅ ΠΊΠ΅ΠΌ-ΡΠΎ Π½Π΅ΡΠ²Π΅Π΄ΡΡΠΈΠΌ. ΠΠΎΠ½ΠΊΠΈ ΠΈ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡΠΠΎΠΏΡΡΡΠΈΠΌ, ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΏΠΎΡΠΈΠ³Π½Π°Π»ΠΈΡΡ ΡΠ°Π±ΠΎΡΠ΅ΠΌΡ ΠΏΠΎΡΠΎΠΊΡ ΠΏΡΡΡ ΡΠ°Π· ΠΏΠΎΠ΄ΡΡΠ΄: ΠΡΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Β«ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΒ», Π·Π°ΠΏΡΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π² debug-ΡΠ΅ΠΆΠΈΠΌΠ΅ (Π½Π΅ ΠΈΠ· ΠΏΠΎΠ΄ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ°), ΠΈ Β«ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΒ» (ΡΠΎ Π΅ΡΡΡ, Π·Π°Π²ΠΈΡΠ°Π½ΠΈΠ΅) Π² release-Π²Π΅ΡΡΠΈΠΈ β ΠΏΡΠΈΠΌ.ΡΠ΅Π΄. ΠΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Ρ Π΄Π΅ΡΠ΅ΠΊΡΠΎΠΌ: ΡΠΈΠΊΠ» for Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΊΡΡΡΠΈΡΡ Π²ΡΠ΅ ΠΏΡΡΡ ΡΠ²ΠΎΠΈΡ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΉ Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ, ΠΊΠΎΠ³Π΄Π° ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΡΠ°ΡΡΡΠ΅Ρ! ΠΠ°Ρ ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΠΎΡΠ΅ΡΠ΅Π΄ΡΡ ΠΠΎΡΡΠ°Π²ΡΠΈΠΊ/ΠΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π½Π΅ ΡΡΡΠ°Π΄Π°Π» ΠΎΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π΅ΡΠ»ΠΈ Π³Π»Π°Π²Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π·Π°Π±Π΅Π³Π°Π» Π²ΠΏΠ΅ΡΡΠ΄ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ, ΠΊΠ°ΠΆΠ΄ΡΠΉ Π·Π°ΠΏΡΠΎΡ ΠΏΡΠΎΡΡΠΎ ΡΡΠ°Π²ΠΈΠ»ΡΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ. ΠΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ, Π΅ΡΠ»ΠΈ ΡΠ°Π±ΠΎΡΠΈΠΉ Π²ΡΠ΅ Π΅ΡΠ΅ Π·Π°Π½ΡΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΈΠΊΠ»Π° for ΠΎΠΆΠΈΠ΄Π°ΡΡ, ΠΏΠΎΠΊΠ° ΡΠ»Π°Π³ go Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ±ΡΠΎΡΠ΅Π½ ΡΠ°Π±ΠΎΡΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ. Π Π°Π±ΠΎΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΠΏΠΎΡΠ»Π΅ ΡΠ±ΡΠΎΡΠ° ΡΠ»Π°Π³Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ·Π²Π°ΡΡ Pulse : ΠΠ°ΠΆΠ½Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π΄Π°Π½ΠΈΡ (ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π½Π° ΠΌΠ΅ΡΡΠ΅ Π²ΡΠ·ΠΎΠ²Π° Console.WriteLine ). ΠΡΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΠΈΠ½ΠΈΡΠΈΠ°ΡΠΎΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ Π²ΡΠ΅ Π²ΡΠ΅ΠΌΡ, ΠΏΠΎΠΊΠ° ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π·Π°Π΄Π°ΡΡ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Π΅ΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΏΠΎΡΠΈΠ³Π½Π°Π»ΠΈΠ»ΠΈ (ΠΈ Π±ΡΠ΄Π΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½, ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π·Π°Π½ΡΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ). Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ (Π³Π»Π°Π²Π½ΡΠΉ) ΡΠΈΠ³Π½Π°Π»ΠΈΡ ΡΠ°Π±ΠΎΡΠ΅ΠΌΡ ΠΏΠΎΡΠΎΠΊΡ ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π·Π°Π΄Π°ΡΡ. ΠΡΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π½Π°ΡΠ½ΡΡ ΡΠΈΠ³Π½Π°Π»ΠΈΡΡ ΡΠ°Π±ΠΎΡΠ΅ΠΌΡ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ΅ΠΊΡΡΡΡ Π»ΠΎΠ³ΠΈΠΊΡ ΠΈΠ· ΠΌΠ΅ΡΠΎΠ΄Π° Main β Ρ Π½Π°Ρ Π½Π°ΡΠ½ΡΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠ²Π° ΡΠΈΠ³Π½Π°Π»ΡΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠ° ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡΡΠΎΠΊΡ ΠΊΠΎΠ΄Π°: ΠΠ»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π·Π°ΠΏΡΡΡΠΈΠΌ Π΄Π²Π° ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΏΠΎΡΠΎΠΊΠ°, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΡΠΈΠ³Π½Π°Π»ΠΈΡ ΡΠ°Π±ΠΎΡΠ΅ΠΌΡ ΠΏΠΎΡΠΎΠΊΡ ΠΏΡΡΡ ΡΠ°Π·. Π’Π΅ΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ Π³Π»Π°Π²Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π±ΡΠ΄Π΅Ρ ΠΎΠΆΠΈΠ΄Π°ΡΡ Π΄Π΅ΡΡΡΠΈ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ: ΠΠΌΠΈΡΠ°ΡΠΈΡ Wait HandleΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ Π·Π°ΠΌΠ΅ΡΠΈΠ»ΠΈ ΡΠ°Π±Π»ΠΎΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅: ΠΎΠ±Π° ΡΠΈΠΊΠ»Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΈΠΌΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡΡΡΠΊΡΡΡΡ: ΠΠΌΠΈΡΠ°ΡΠΈΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ WaitHandle, Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΠΏΡΠΎΡΡΠ°. ΠΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ Π²ΡΠ·ΠΎΠ²Π° WaitAll Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ WaitHandle β Π½Π΅ ΡΡΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, Π²ΠΊΠ»ΡΡΠ°ΡΡΠ΅Π΅ Π²ΡΠ΅ ΡΠ»Π°Π³ΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π²ΠΌΠ΅ΡΡΠΎ WaitHandle : ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ WaitAll Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² Π½Π΅ ΠΏΡΠΈΠ³ΠΎΠ΄Π΅Π½ ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ·-Π·Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΠΌ COM-ΠΊΠΎΠ΄ΠΎΠΌ. ΠΠΌΠΈΡΠ°ΡΠΈΡ WaitAny β ΠΏΡΠΎΡΡΠΎ Π²ΠΎΠΏΡΠΎΡ Π·Π°ΠΌΠ΅Π½Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° && ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ ||. Wait ΠΈ Pulse vs. Wait HandlesΠ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΡΡΠΎΠΌΡ Ρ WaitHandle ΠΏΡΠΎΡΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ β ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². Π ΠΏΡΠ»Π°Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ. Π ΡΠΌΡΡΠ»Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Wait ΠΈ Pulse ΠΈΠΌΠ΅ΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅Π²Π΅Ρ, Π΅ΡΠ»ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ Π²ΠΎΡ ΡΠ°ΠΊΠΎΠΌΡ ΠΎΠ±ΡΠ°Π·ΡΡ Π΄ΠΈΠ·Π°ΠΉΠ½Π°: Suspend ΠΈ ResumeΠΠΎΠΆΠ½ΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ Suspend Π΄Π»Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π² ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΎΡΡΠΎΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π² ΡΠΈΠΊΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ/Π²ΡΠ·ΠΎΠ² Suspend Π΄Π»Ρ ΡΠ΅Π±Ρ/ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π²ΡΠ·ΠΎΠ²Π° Resume (βΠΏΠΎΠ±ΡΠ΄ΠΊΠΈβ) Π³Π»Π°Π²Π½ΡΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° Π±ΡΠ΄Π΅Ρ Π³ΠΎΡΠΎΠ²Π° ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ Π·Π°Π΄Π°ΡΠ°. Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ, Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»ΠΈ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠ΅ΠΉΡΠ°Ρ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½. ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄: ΠΠ΅ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Suspend ΠΈ Resume ΠΈΠΌΠ΅ΡΡ Π΄Π²Π° ΡΠ΅ΠΆΠΈΠΌΠ° β ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΠΈ Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ. ΠΠ²Π°ΡΠΈΠΉΠ½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π°Π²Π°ΡΠΈΠΉΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° Abort : ΠΠ΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠ΅ ThreadAbortException, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π½Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π°Π²Π°ΡΠΈΠΉΠ½ΠΎΠΌΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ ΡΠΈΠΏΠΎΠ² ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ. Abort Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Π½Π° ΠΏΠΎΡΠΎΠΊ Π² Π»ΡΠ±ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ β ΡΠ°Π±ΠΎΡΠ΅ΠΌ, Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ, ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΌ ΠΈΠ»ΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΌ. ΠΡΠ»ΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ, Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ThreadStateException β Π½Π° ΡΠ΅ΠΉ ΡΠ°Π· Π² Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ β ΠΈ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ, ΠΏΠΎΠΊΠ° ΠΏΠΎΡΠΎΠΊ Π½Π΅ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΡ ΡΠ°Π±ΠΎΡΡ. ΠΠΎΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠΈΡΡ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ: Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΠΈ Ρ Thread.AbortC#-ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ using β Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΏΡΠΎΡΡΠΎ ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½Π°Ρ Π·Π°ΠΏΠΈΡΡ Π΄Π»Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°: Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΄ΠΎ Π²ΡΠ·ΠΎΠ²Π° Dispose Π² Π±Π»ΠΎΠΊΠ΅ finally Π΄Π΅Π»ΠΎ Π½Π΅ Π΄ΠΎΠΉΠ΄Π΅Ρ, Ρ ΡΠ½Π΄Π» ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π·Π°Π²ΠΈΡΠ½Π΅Ρ, ΠΏΡΠ΅ΡΠ΅ΠΊΠ°Ρ Π»ΡΠ±ΡΠ΅ ΠΏΠΎΠΏΡΡΠΊΠΈ ΡΠΎΠ·Π΄Π°ΡΡ myfile.txt Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΡΠ°Π²ΡΠ΅ΠΉΡΡ ΠΆΠΈΠ·Π½ΠΈ Π΄ΠΎΠΌΠ΅Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° CLR, ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, Π½Π΅ΠΏΡΠ°ΠΊΡΠΈΡΠ½ΠΎ, Π²ΡΡΠ°Π΅Ρ Π²ΠΎΠΏΡΠΎΡ, ΠΊΠ°ΠΊ ΠΆΠ΅ ΠΏΠΈΡΠ°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π°Π²Π°ΡΠΈΠΉΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠ°ΡΡ. Π‘Π°ΠΌΡΠΉ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠΉ Π²ΡΡ ΠΎΠ΄ ΠΈΠ· ΡΠΈΡΡΠ°ΡΠΈΠΈ β Π½Π΅ Π·Π°Π²Π΅ΡΡΠ°ΡΡ Π°Π²Π°ΡΠΈΠΉΠ½ΠΎ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Π²ΠΎΠΎΠ±ΡΠ΅, Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ Π±ΡΠ»Π΅Π²ΠΎ ΠΏΠΎΠ»Π΅, ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΡΠΎΠΊΡ ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ. Π Π°Π±ΠΎΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΡΡΠΎ ΠΏΠΎΠ»Π΅, ΡΠ»Π΅Π³Π°Π½ΡΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠ°ΡΡΡ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ Π² true. ΠΠ°ΠΊ Π½ΠΈ ΡΡΡΠ°Π½Π½ΠΎ, ΡΠ°ΠΌΡΠΌ ΡΠ»Π΅Π³Π°Π½ΡΠ½ΡΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΠΎΠ² Abort Π΄Π»Ρ ΡΠ΅Π±Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ, ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π½ΡΠΉ Π²ΡΠ±ΡΠΎΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΡΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ ΠΎΡΠΈΡΡΠΊΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠΎΠ² catch/finally β Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π²ΡΠ·ΠΎΠ²Ρ Abort ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ Π² Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΌ Π½Π°ΠΌΠΈ ΠΌΠ΅ΡΡΠ΅: ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠΌΠ΅Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΎΡΠΎΠ± Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΏΡΠΈΠΊΠΎΠ½ΡΠΈΡΡ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ β Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΠΏΠΎΡΠΎΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΌ Π΄ΠΎΠΌΠ΅Π½Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π° Abort ΠΏΡΠΎΡΡΠΎ ΡΠ½ΠΎΡΠΈΡΡΡ Π²Π΅ΡΡ Π΄ΠΎΠΌΠ΅Π½, ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ Π·Π°Π²ΠΈΡΡΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ². Π Π²ΠΎΡ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, Π² Π½Π΅ΠΉ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΌ Π΄ΠΎΠΌΠ΅Π½Π΅, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ³ΡΡΠΆΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠ°. ΠΠ½Π° Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π±Π΅Π· ΠΎΡΠΈΠ±ΠΎΠΊ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π΄ΠΎΠΌΠ΅Π½ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π²ΡΠ³ΡΡΠΆΠ°ΡΡΡ, ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΉ Ρ ΡΠ½Π΄Π»: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΡΠ°Π·ΡΡΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠΌΠ΅Π½ΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΊΠ»Π°ΡΡΠΈΡΠΈΡΠΈΡΡΠ΅ΡΡΡ Π² ΠΌΠΈΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΊΠ°ΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, ΠΎΡΠ½ΠΈΠΌΠ°ΡΡΠ°Ρ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ (Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄), ΡΠ°ΠΊ ΡΡΠΎ, Π½Π°Π²Π΅ΡΠ½ΠΎΠ΅, Π½Π΅ ΡΡΠΎΠΈΡ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π² ΡΠΈΠΊΠ»Π΅. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅, ΠΏΡΠΈΠ²Π½ΠΎΡΠΈΠΌΠΎΠ΅ Π΄ΠΎΠΌΠ΅Π½Π°ΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ, ΠΈ Π²ΡΠ΅Π΄Π½ΡΠΌ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ unit-ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ Π΄ΠΎΠΌΠ΅Π½Π°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ. ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ Π²Π°ΡΠΈΠ°Π½Ρ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π²Π΅ΡΡΠΈΡΡΡΡ β Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΡΠΈΠΌΠ΅Ρ β ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ Π² true ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ IsBackground, ΠΈ Π³Π»Π°Π²Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ, Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠΉΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΠ°Π±ΠΎΡΠΈΠΉ Π΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ. Π€ΠΎΠ½ΠΎΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π½Π΅ ΡΠΏΠΎΡΠΎΠ±Π΅Π½ ΠΏΡΠΎΠ΄Π»ΠΈΡΡ ΠΆΠΈΠ·Π½Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ°ΠΊ ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ, ΡΠ½ΠΎΡΡ Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠΎΠ½ΠΎΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ. ΠΠΎΠ³Π΄Π° ΠΏΠΎΡΠΎΠΊ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΠΈΠ·-Π·Π° ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΎΠ½ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π½Π°ΠΌΠ΅ΡΡΠ²ΠΎ, Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π±Π»ΠΎΠΊΠΈ finally Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ.
|