Visual C++ .NET/Thread/Abort

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Aborting Threads

<source lang="csharp">

  1. include "stdafx.h"

using namespace System; using namespace System::Threading; ref class MyThread { public:

   static void ThreadFunc(Object ^Name);

}; void MyThread::ThreadFunc(Object ^Name) {

   Thread ^thr = Thread::CurrentThread;
   try
   {
       for (int i = 0; i < 100; i++)
       {
           Console::WriteLine("{0} {1}", Name, i.ToString());
           Thread::Sleep(1);
       }
       return;
   }
   catch (ThreadAbortException^)
   {
       Console::WriteLine("{0} Aborted", Name);
   }

} void main() {

   Thread ^thr1 = gcnew Thread(gcnew ParameterizedThreadStart(&MyThread::ThreadFunc));
   Thread ^thr2 = gcnew Thread(gcnew ParameterizedThreadStart(&MyThread::ThreadFunc));
   thr1->Start("Thread1");
   thr2->Start("Thread2");
   Thread::Sleep(2);
   thr1->Abort();
   Thread::Sleep(4);
   thr2->Abort();
   try
   {
       thr1->Start();
   }
   catch (ThreadStateException ^tse)
   {
       Console::WriteLine(tse->ToString());
   }

}

 </source>