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

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

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

  //Π Π°Π±ΠΎΡ‡ΠΈΠ΅ состояния

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

  //ОТиданиС запуска Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°

  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();