Cách tạo,sử dụng và hủy thread trong C#


Mô hình chuyển trạng thái của Thread

Xem xét các ví dụ sau đây về thread trên ứng dụng console

Ví dụ về tạo thread:

* Code:

using System.Threading;

namespace ConsoleApplicationThread {

    classEntryPoint {

        privatestaticvoid ThreadFunc()  {

            Console.WriteLine(“Hello from new thread {0}!”,Thread.CurrentThread.GetHashCode());   }

        staticvoid Main(string[] args) {

            // Tao thread mới

            Thread newThread = newThread(newThreadStart(EntryPoint.ThreadFunc));

            Console.WriteLine(“Main Thread is {0}”,Thread.CurrentThread.ManagedThreadId);

            Console.WriteLine(“Starting new thread…”);

            // bắt đầu chạy thread

            newThread.Start();

            // Đợi thread chạy xong->đợi hệ điều hành trả về handle của thread

            newThread.Join();

            Console.WriteLine(“New thread has finished”);

        }

    }

}

Cách xử dụng thông qua một chương trình đơn giản:

* Code:

using System.Threading;

using System.Collections;

namespace ConsoleApplicationThread {

    classEntryPoint  {

        staticvoid Main(string[] args)  {           

            Queue queue1 = newQueue();

            Queue queue2 = newQueue();

            // một số thao tác điền dữ liệu vào queue

            // Xử lý mỗi queue tren một thread

            Thread proc1 = newThread( EntryPoint.ThreadFunc );

            proc1.Start( queue1 );

            Thread proc2 = newThread( EntryPoint.ThreadFunc );

            proc2.Start( queue2 );

            //thực hiện một số lệnh khác khi thread đang chạy

            // Đợi trả về handle của thread

            proc1.Join();

            proc2.Join();

            }

            staticprivatevoid ThreadFunc( object obj ) {

            // Ép kiểu obj về dạng Queue

            Queue theQueue = (Queue) obj;

            // làm một số thao tác trên queue …

            Console.WriteLine(“Thread {0} is running!”, Thread.CurrentThread.GetHashCode());

        }

    }

}

Hủy một thread khi thread đó đang chạy:

* Code :

using System.Threading;

using System.Collections;

namespace ConsoleApplicationThread {

    classEntryPoint  {

       

            privatestaticvoid ThreadFunc()  {

                ulong counter = 0;

                while (true) {

                    try  {

                        Console.WriteLine(“{0}”, counter++);   }

                    catch (ThreadAbortException)  {

                        // Xử lý ngoại lệ trong phần này …

                        Console.WriteLine(“Abort! “);

                    }

                }

            }

            staticvoid Main(string[] args)  {

                Thread newThread =

                newThread(newThreadStart(EntryPoint.ThreadFunc));

                newThread.Start();

                Thread.Sleep(2000);//đợi thread trong thời gian 2 s

                // Gọi phương thức để hủy bỏ thread

                newThread.Abort();

                //Đợi handle thread trả về

                newThread.Join();

            }

    }

}

 

Gửi phản hồi

Please log in using one of these methods to post your comment:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s