//Π Π°Π±ΠΎΡΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ
//-----------------
//ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π·Π°ΠΏΡΡΠΊΠ° ΡΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°
waitingToStartAsync,
//ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅
running,
//ΠΠ°ΠΏΡΠΎΡΠΈΡΡ ΠΎΡΠΌΠ΅Π½Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ
requestAbort,
//--------------------
//Π‘ΠΎΡΡΠΎΡΠ½ΠΈΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ
//--------------------
//Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ: Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°
//ΡΡΠΏΠ΅ΡΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΎ
done,
//Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ: Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ° ΠΎΡΠΌΠ΅Π½Π΅Π½ΠΎ
//Π΄ΠΎ Π΅Π³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ
aborted
}
ProcessingState m_processingState;
public delegate void ExecuteMeOnAnotherThread(ThreadExecuteTask checkForAborts);
private ExecuteMeOnAnotherThread m_CallFunction;
private object m_useForStateMachineLock;
public ThreadExecuteTask(ExecuteMeOnAnotherThread functionToCall) {
//Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
//Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ Π°Π²ΡΠΎΠΌΠ°ΡΠ΅ Π² ΡΠ΅Π»ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ
m_useForStateMachineLock = new Object();
//ΠΠ±ΠΎΠ·Π½Π°ΡΠΈΡΡ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΡ ΠΊ Π½Π°ΡΠ°Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
m_processingState = ProcessingState.notYetStarted;
//Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ·Π²Π°ΡΡ
//Π² Π½ΠΎΠ²ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅
m_CallFunction = functionToCall;
//----------------------------------------------------------
//Π‘ΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΈ Π²ΡΠ·Π²Π°ΡΡ Π² Π½Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅:
// this.ThreadStartPoint()
//----------------------------------------------------------
System.Threading.ThreadStart threadStart;
threadStart = new System.Threading.ThreadStart(ThreadStartPoint);
System.Threading.Thread newThread;
newThread = new System.Threading.Thread(threadStart);
//ΠΠ±ΠΎΠ·Π½Π°ΡΠΈΡΡ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΡ ΠΊ Π½Π°ΡΠ°Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (Π² ΡΠ΅Π»ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡΠΈ
//ΡΡΠΎ Π²Π°ΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π΅ΡΠ΅ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½ ΠΏΠΎΡΠΎΠΊ!)
setProcessingState(ProcessingState.waitingToStartAsync);
//ΠΠ°ΡΡ ΠΠ‘ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π½Π°ΡΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π² Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅
newThread.Start();
//ΠΠΎΠ·Π²ΡΠ°ΡΠΈΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΉ ΡΡΠΎΡ ΠΏΠΎΡΠΎΠΊ
}
//---------------------------------------------
//ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΡΠΊΠΎΠΉ Π²Ρ ΠΎΠ΄Π°, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠΉ
//Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅
//---------------------------------------------
private void ThreadStartPoint() {
//Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅
//Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅!
setProcessingState(ProcessingState.running);
//ΠΠ°ΠΏΡΡΡΠΈΡΡ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΊΠΎΠ΄ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π²
//Π½Π°Ρ ΠΊΠ»Π°ΡΡ, ΡΡΠΎΠ±Ρ ΡΡΠΎΡ ΠΊΠΎΠ΄ ΠΌΠΎΠ³ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ, Π½Π΅ ΠΏΠΎΡΡΡΠΏΠΈΠ» Π»ΠΈ
//Π·Π°ΠΏΡΠΎΡ Π½Π° ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
m_CallFunction(this);
//ΠΡΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ Π±ΡΠ»ΠΎ ΠΎΡΠΌΠ΅Π½Π΅Π½ΠΎ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ,
//ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°Π»ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ
if (m_processingState != ProcessingState.aborted) {
//ΠΠ±ΠΎΠ·Π½Π°ΡΠΈΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
setProcessingState(ProcessingState.done);
}
//ΠΡΠΉΡΠΈ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠ°...
}
//----------------
//ΠΠΎΠ½Π΅ΡΠ½ΡΠΉ Π°Π²ΡΠΎΠΌΠ°Ρ
//----------------
public void setProcessingState(ProcessingState nextState) {
//B Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
//ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Ρ ΠΏΠΎΠΏΡΡΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅
lock(m_useForStateMachineLock) {
//B ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΠΏΡΡΠΊΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π² ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅
//Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ
if (m_processingState == nextState) {
return;
}
//------------------------------------------------------
//ΠΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ Π·Π°ΡΠΈΡΠ½ΡΠΉ ΠΊΠΎΠ΄, Π³Π°ΡΠ°Π½ΡΠΈΡΡΡΡΠΈΠΉ
//Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° Π² Π΄ΡΡΠ³ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, Π΅ΡΠ»ΠΈ Π·Π°Π΄Π°ΡΠ°
//Π»ΠΈΠ±ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½Π°, Π»ΠΈΠ±ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΎΡΠΌΠ΅Π½Π΅Π½Π°
//------------------------------------------------------
if ((m_processingState == ProcessingState.aborted) ||
(m_processingState == ProcessingState.done)) {
return;
}
//Π£Π±Π΅Π΄ΠΈΡΡΡΡ Π² Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΡΡΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ
switch (nextState) {
case ProcessingState.notYetStarted:
throw new Exception("ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ 'notYetStarted' Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½");
case ProcessingState.waitingToStartAsync:
if (m_processingState != ProcessingState.notYetStarted) {
throw new Exception("ΠΠ΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ");
}
break;
case ProcessingState.running:
if (m_processingState != ProcessingState.waitingToStartAsync) {
throw new Exception("ΠΠ΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ");
}
break;
case ProcessingState.done:
//ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π²Π΅ΡΡΠΈΡΡ ΡΠ°Π±ΠΎΡΡ Π»ΠΈΡΡ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ.
//ΠΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ Π² ΡΠ΅Ρ ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π·Π°ΡΡΠ΅Π±ΠΎΠ²Π°Π»
//ΠΎΡΠΌΠ΅Π½Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, Π½ΠΎ ΡΠ°Π±ΠΎΡΠ° ΠΊ ΡΡΠΎΠΌΡ ΠΌΠΎΠΌΠ΅Π½ΡΡ ΡΠΆΠ΅ Π±ΡΠ»Π° Π·Π°ΠΊΠΎΠ½ΡΠ΅Π½Π°
if ((m_processingState != ProcessingState.running) &&
(m_processingState != ProcessingState.requestAbort)) {
throw new Exception("ΠΠ΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ");
}
break;
case ProcessingState.aborted:
if (m_processingState != ProcessingState.requestAbort) {
throw new Exception("ΠΠ΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ");
}
break;
}
//Π Π°Π·ΡΠ΅ΡΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ
m_processingState = nextState;
}
}
public ProcessingState State {
get {
ProcessingState currentState;
//ΠΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ ΠΏΠΎΠΏΡΡΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΡΠ΅Π½ΠΈΡ/Π·Π°ΠΏΠΈΡΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ
lock(m_useForStateMachineLock) {
currentState = m_processingState;
}
return currentState;
}
}
} //ΠΠΎΠ½Π΅Ρ ΠΊΠ»Π°ΡΡΠ°
Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 9.2 ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΠΊΠΎΠ΄, ΠΈΠΌΠΈΡΠΈΡΡΡΡΠΈΠΉ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ ΡΠΎΠ½ΠΎΠ²ΡΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ. ΠΠΎΠ³Π΄Π° ΡΠΎΠ½ΠΎΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π½Π°ΡΠΈΠ½Π°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΊΠΎΠ΄, Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΠΎΠΊΠ½ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ. ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ ΠΈΠΌΠΈΡΠΈΡΡΠ΅ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ ΡΠ΅ΡΠΈΠΈ ΠΏΠ°ΡΠ· Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ Π² ΠΎΠ΄Π½Ρ ΡΡΠ΅ΡΡ ΡΠ΅ΠΊΡΠ½Π΄Ρ, Π² ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠ°Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π½Π΅ ΠΏΠΎΡΡΡΠΏΠΈΠ» Π»ΠΈ ΠΎΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π·Π°ΠΏΡΠΎΡ Π½Π° ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΠΈΡΡΠΈΠ½Π³ 9.2. Π’Π΅ΡΡΠΎΠ²Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅using System;
//-------------------------------------------------
//Π’Π΅ΡΡΠΎΠ²ΡΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
//ΡΠΎΠ½ΠΎΠ²ΡΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ
//-------------------------------------------------
public class Test1 {
public int m_loopX;
//------------------------------------------------------------------
//Π€ΡΠ½ΠΊΡΠΈΡ, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠ°Ρ ΡΠΎΠ½ΠΎΠ²ΡΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ
// [in] threadExecute: ΠΠ»Π°ΡΡ, ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°.
// ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ
// ΡΠΎΠ³ΠΎ, Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π»ΠΈ ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ
//------------------------------------------------------------------
public void ThreadEntryPoint(ThreadExecuteTask threadExecute) {
//ΠΡΠΎ ΠΎΠΊΠ½ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΡΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°,
//Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π·Π°Π΄Π°ΡΠ°
System.Windows.Forms.MessageBox.Show("ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π’ΠΠ‘Π’ΠΠΠΠΠ ΠΠΠ’ΠΠΠ");
//------
//60 ΡΠ°Π·
//------
for (m_loopX = 0; m_loopX < 60; m_loopX++) {
//ΠΡΠ»ΠΈ Π·Π°ΡΡΠ΅Π±ΠΎΠ²Π°Π½Π° ΠΎΡΠΌΠ΅Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π²Π΅ΡΡΠΈΡΡ Π·Π°Π΄Π°ΡΡ
if (threadExecute.State == ThreadExecuteTask.ProcessingState.requestAbort) {
threadExecute.setProcessingState(ThreadExecuteTask.ProcessingState.aborted);
return;
}
//ΠΠΌΠΈΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ: ΠΏΠ°ΡΠ·Π° 1/3 ΡΠ΅ΠΊΡΠ½Π΄Ρ
System.Threading.Thread.Sleep(333);
}
}
} //ΠΠΎΠ½Π΅Ρ ΠΊΠ»Π°ΡΡΠ°
Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 9.3 ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Ρ ΡΠ΅Π»ΡΡ Π°ΠΊΡΠΈΠ²ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΡΠΎΠ½ΠΎΠ²ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ. ΠΡΠΎΡ ΠΊΠΎΠ΄ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌ ΠΊΠ»Π°ΡΡΠΎΠΌ ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΡΠΎΡΠΌΡ, Ρ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ²ΡΠ·Π°Π½Ρ ΡΠΎΠ±ΡΡΠΈΡ ΡΠ΅Π»ΡΠΊΠΎΠ² Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ°Ρ .
ΠΠΈΡΡΠΈΠ½Π³ 9.3. ΠΠΎΠ΄ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ΅ ΡΠ΅ΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°//ΠΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°
private ThreadExecuteTask m_threadExecute;
//ΠΠ»Π°ΡΡ, ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π² Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅
Test1 m_testMe;
//----------------------------------------------------------
//ΠΡΠΎΡ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½ ΡΠ°Π½Π΅Π΅ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ
//ΠΎΠ½ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ!
//
//Π‘ΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
//----------------------------------------------------------
private void buttonStartAsyncExecution_Click(object sender, System.EventArgs e) {
//Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ°, ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π²ΡΠ·Π²Π°ΡΡ
//Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅
m_testMe = new Test1();