Bài giảng Ngôn ngữ lập trình nâng cao - Bài 6 - Lý Anh Tuấn

Trong mục này, chúng ta sẽ học:

Xử lý ngoại lệ

Thực thi ngoại lệ người dùng định nghĩa

Thực thi luồng (threads)

pdf28 trang | Chuyên mục: Visual C# | Chia sẻ: yen2110 | Lượt xem: 397 | Lượt tải: 2download
Tóm tắt nội dung Bài giảng Ngôn ngữ lập trình nâng cao - Bài 6 - Lý Anh Tuấn, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
 của khối catch đưa ra một đối tượng của lớp 
ngoại lệ như một tham số, trong đó nó đề cập tới ngoại lệ phát 
sinh. 
Chúng ta có thể xử lý ngoại lệ liên quan tới khối try bằng 
cách cung cấp một hoặc nhiều khối xử lý catch, ngay sau 
khối try: 
try 
{ 
 //các câu lệnh có thể gây ra ngoại lệ 
} 
catch () 
{ 
 //Mã xử lý lỗi 
} 
Slide 7 of 21 Ver. 1.0 
Object-Oriented Programming Using C# 
Xử lý ngoại lệ (tiếp) 
Khối finally: 
Khối finally được sử dụng để xử lý một tập câu lệnh trong 
đó một ngoại lệ được đưa ra hoặc không: 
try 
{ 
 //Câu lệnh có thể gây ra ngoại lệ 
} 
catch () 
{ 
 //Mã xử lý lỗi 
} 
finally 
{ 
 //Câu lệnh phải được xử lý. 
} 
Slide 8 of 21 Ver. 1.0 
Object-Oriented Programming Using C# 
Ví dụ: Xử lý ngoại lệ 
Slide 9 of 21 Ver. 1.0 
Object-Oriented Programming Using C# 
Vấn đề đưa ra: 
Duy đang làm việc trong một dự án trong đó anh phải tính toán 
tổng giá trị của mảng số nguyên. Duy cần xử lý ngoại lệ có thể 
xảy ra khi anh ấy làm việc với mảng. Nếu bất kỳ điều kiện 
ngoại lệ xảy ra khi Duy thực thi chương trình, ứng dụng cần 
hiển thị thông tin về ngoại lệ tương ứng. 
 Hãy giúp Duy xử lý các ngoại lệ này. 
Ví dụ: Xử lý ngoại lệ cho mảng 
Slide 10 of 21 Ver. 1.0 
Object-Oriented Programming Using C# 
Vấn đề đưa ra: 
Hoàng đang làm việc trong một dự án của công ty FPT 
Software, trong đó anh phải viết chương trình tìm kiếm thông 
tin nhân viên dựa vào mã nhân viên của họ. Hoàng cần xử lý 
ngoại lệ khi không tìm thấy nhân viên tương ứng. 
 Hãy giúp Hoàng xử lý các ngoại lệ này. 
Ví dụ: Quản lý sinh viên 
Slide 11 of 21 Ver. 1.0 
Object-Oriented Programming Using C# 
Thực thi ngoại lệ người dùng định nghĩa 
Trong C#, chúng ta có thể tạo các lớp ngoại lệ riêng. Những 
ngoại lệ như vậy được biết tới như là ngoại lê người dùng 
định nghĩa. 
Lớp Exception là lớp cơ sở cho tất cả ngoại lệ trong C#. 
Ngoại lệ người dùng định nghĩa phải được kế thừa hoặc từ 
lớp ngoại lệ hoặc từ lớp kế thừa chuẩn. 
Slide 12 of 21 Ver. 1.0 
Object-Oriented Programming Using C# 
Thực thi ngoại lệ người dùng định nghĩa (tiếp) 
Các lớp ngoại lệ người dùng định nghĩa được dẫn xuất từ 
lớp ApplicationException. 
Để thực thi ngoại lệ người dùng định nghĩa, chúng ta cần: 
Phát sinh ngoại lệ: Chúng ta có thể sử dụng câu lệnh throw để 
phát sinh các ngoại lệ. 
Ném (Throw) một đối tượng: Chúng ta có thể ném một đối 
tượng nếu đối tượng hoặc là trực tiếp hoặc là dẫn xuất gián 
tiếp từ System.Exception. Chúng ta có thể sử dụng câu 
lệnh throw trong khối catch để ném một đối tượng như đoạn 
mã sau: 
 catch(Exception caught) 
{ 
 . . . 
 throw caught 
} 
Slide 13 of 21 Ver. 1.0 
Object-Oriented Programming Using C# 
Một thread được định nghĩa như quá trình xử lý một 
chương trình. 
Chúng ta có thể định nghĩa một luồng duy nhất để điều 
khiển trong chương trình, sử dụng thread. 
Threads được sử dụng để chạy các ứng dụng thực thi tính 
toán lớn và phức tạp. 
Quá trình được xử lý sử dụng một thread được biết đến là 
quá trình thread đơn (single-threaded) trong đó quá trình 
một thể hiện chương trình đang chạy. 
Ứng dụng single-threaded chỉ thực thi một ứng dụng tại một 
thời điểm. Chúng ta phải đợi một nhiệm vụ hoàn thành 
trước khi thực thi nhiệm vụ khác. 
Thực thi luồng (Thread) 
Slide 14 of 21 Ver. 1.0 
Object-Oriented Programming Using C# 
Hình sau miêu tả quá trình xử lý của single-threaded. 
Để xử lý nhiều hơn một nhiệm vụ cùng một thời điểm, 
chúng ta có thể tạo nhiều threads trong một chương trình. 
Quá trình tạo hai hoặc nhiều threads được gọi là đa luồng 
(multithreaded). 
Thực thi luồng (Thread) 
Slide 15 of 21 Ver. 1.0 
Object-Oriented Programming Using C# 
Thực thi luồng (Thread) 
Hình sau miêu tả quá trình xử lý multithreaded. 
Slide 16 of 21 Ver. 1.0 
Object-Oriented Programming Using C# 
Mô hình thread trong C# 
Trong hệ thống single-threaded, một phương pháp được gọi 
là vòng lặp sự kiện với polling được sử dụng. 
Polling là quá trình một sự kiện được xử lý trong một thời 
điểm. 
Trong vòng lặp sự kiện với phương pháp polling, một thread 
đơn chạy trong một vòng lặp vô hạn cho tới khi hoạt động 
của nó được hoàn thành. 
Trong ứng dụng single-threaded nếu thread được tạm dừng 
(suspend) trong quá trình xử lý, toàn bộ chương trình dừng 
việc xử lý. 
Trong multithreading, Thời gian mà thread đợi để dành thời 
gian cho CPU có thể thực thi cho nhiệm vụ khác. 
Slide 17 of 21 Ver. 1.0 
Object-Oriented Programming Using C# 
Mô hình thread trong C# 
Trong C#, chúng ta sẽ sử dụng lớp Thread để làm việc với 
thread. 
Lớp System.Threading.Thread được sử dụng để xây 
dựng và truy cập các thread riêng trong ứng dụng 
multithreaded. 
Slide 18 of 21 Ver. 1.0 
Object-Oriented Programming Using C# 
Main Thread 
Main thread được tạo tự động khi bắt đầu xử lý chương 
trình C#. 
Thread được tạo bằng việc sử dụng lớp Thread được gọi 
là thread con, trong đó main thread được gọi là thread cha 
hoặc thread chính. 
Chúng ta có thể truy cập thread sử dụng thuộc tính 
CurrentThread của lớp Thread. 
Slide 19 of 21 Ver. 1.0 
Object-Oriented Programming Using C# 
Trong C#, chúng ta tạo thread bằng cách tạo một đối tượng 
kiểu Thread, đưa ra một hàm tạo tham chiếu 
ThreadStart, và gọi phương thức Start() của thread 
mới. 
Thread mới bắt đầu xử lý không đồng bộ với một lời gọi 
phương thức của thread. 
Lớp Thread có nhiều phương thức. Chúng ta có thể sử 
dụng những phương thức để điều khiển việc xử lý thread. 
Một số phương thức là: 
Start(): Bắt đầu thread. 
Sleep(): Tạp dừng thread trong một khoảng thời gian. 
Abort(): Kết thúc thread. 
Suspend(): Đình chỉ một thread. Nếu thread đó đã thực sự bị 
đình chỉ nó không có tác dụng. 
Resume(): Phục hồi thread đã bị đình chỉ. 
Làm việc với Thread 
Slide 20 of 21 Ver. 1.0 
Object-Oriented Programming Using C# 
Chúng ta có thể tạo thread bằng cách mở rộng lớp Thread. 
Lớp thread mở rộng gọi phương thức Start() để bắt đầu 
thực thi thread con. Ví dụ sau để tạo một thread: 
ThreadStart ChildRef = new 
ThreadStart(ChildThreadCall); 
Thread ChildThread = new Thread(ChildRef); 
ChildThread.Start(); 
Tạo Thread 
Slide 21 of 21 Ver. 1.0 
Object-Oriented Programming Using C# 
using System; 
using System.Threading; 
namespace Csharp 
{ 
 class TestCsharp 
 { 
 public static void CallToChildThread(){ 
 Console.WriteLine("Thread con bat dau!!!"); 
 } 
 static void Main(string[] args){ 
 ThreadStart childref = new ThreadStart(CallToChildThread); 
 Console.WriteLine("Trong Main Thread: tao thread con."); 
 Thread childThread = new Thread(childref); 
 childThread.Start(); 
 Console.ReadKey(); 
 } 
 } 
} 
Ví dụ 1: Tạo Thread 
Slide 22 of 21 Ver. 1.0 
Object-Oriented Programming Using C# 
class Program 
{ 
 static void Main() 
 { 
 Thread t = new Thread(new ThreadStart(MethodA)); 
 t.Start(); 
 MethodB(); 
 } 
 static void MethodA() 
 { 
 for (int i = 0; i < 100; i++) 
 Console.Write("0"); 
 } 
 static void MethodB() 
 { 
 for (int i = 0; i < 100; i++) 
 Console.Write("1"); 
 } 
} 
Ví dụ 2: Tạo Thread 
Slide 23 of 21 Ver. 1.0 
Object-Oriented Programming Using C# 
Quản lý Thread 
Có nhiều nhiệm vụ chúng ta cần phải thực thi để quản lý 
hoạt động hoặc vòng đời của thread. 
Chúng ta có thể quản lý tất cả các nhiệm vụ sử dụng đa 
dạng phương thức sẵn có trong lớp Thread. 
Phương thức tĩnh Thread.Sleep() gọi phương thức tĩnh 
CurrentThread, sau đó tạm dừng thread trong khoảng 
thời gian định chỉ định. 
Slide 24 of 21 Ver. 1.0 
Object-Oriented Programming Using C# 
using System; 
using System.Threading; 
namespace Csharp 
{ 
 class TestCsharp 
 { 
 public static void CallToChildThread(){ 
 Console.WriteLine("Bat dau Thread con!!!"); 
 // Thread nay dung khoang 5000 milisecond 
 int sleepfor = 5000; 
 Console.WriteLine("Thread con dung trong khoang {0} giay", 
 sleepfor / 1000); 
 Thread.Sleep(sleepfor); 
 Console.WriteLine("Thread con phuc hoi!!!"); 
 } 
Ví dụ quản lý Thread 
Slide 25 of 21 Ver. 1.0 
Object-Oriented Programming Using C# 
 static void Main(string[] args) 
 { 
 ThreadStart childref = new ThreadStart(CallToChildThread); 
 Console.WriteLine("Trong Main Thread: tao Thread con."); 
 Thread childThread = new Thread(childref); 
 childThread.Start(); 
 Console.ReadKey(); 
 } 
 } 
} 
Ví dụ quản lý Thread 
Slide 26 of 21 Ver. 1.0 
Object-Oriented Programming Using C# 
Hủy Thread 
Nếu thread yêu cầu hủy bỏ, phương thức 
Thread.Abort() cho phép chúng ta thực thi nhiệm vụ 
này. 
Bỏ qua thread đang chạy bằng cách ném một ngoại lệ 
ThreadAbortException. Ngoại lệ này không thể bắt. 
Nếu khối finally được trình bày trong phương thức, khi 
chạy sẽ gửi điều khiển tới nó. 
Slide 27 of 21 Ver. 1.0 
Object-Oriented Programming Using C# 
Trong mục này, chúng ta đã học: 
Xử lý ngoại lệ được thực thi với các từ khóa sau: 
try 
catch 
finally 
Xử lý ngoại lệ cung cấp một cấu trúc và cách thức xử lý đồng 
bộ các lỗi mức hệ thống và mức ứng dụng. 
Xử lý ngoại lệ là quá trình cung cấp một cách thức thay thế để 
xử lý khi một ứng dụng không thể xử lý theo cách mong muốn. 
Ngoài ra để xử lý ngoại lệ người dung định nghĩa, người sử 
dụng có thể tạo cá ngoại lệ riêng bằng cách dẫn xuất lớp ngoại 
lệ từ lớp ApplicationException. 
Tổng kết 
Slide 28 of 21 Ver. 1.0 
Object-Oriented Programming Using C# 
Chúng ta chỉ có thể ném một đối tượng nếu các kiểu đối tượng 
hoặc dẫn xuất trực tiếp hoặc gián tiếp từ 
System.Exception. 
Chúng ta có thể sử dụng câu lệnh throw để phát sinh một 
ngoại lệ riêng. 
Một thread được định nghĩa như một phần xử lý của chương 
trình. Tuần tự câu lệnh được xử lý để định nghĩa một luồng 
điều khiển duy nhất. 
Một chương trình tạo hai hoặc nhiều thread được gọi là 
chương trình đa luồng (multithreaded). 
Lớp System.Threading được sử dụng để xây dựng và truy 
cập các thread riêng trong ứng dụng multithreaded. 
Tổng kết (tiếp) 

File đính kèm:

  • pdfbai_giang_ngon_ngu_lap_trinh_nang_cao_bai_6_ly_anh_tuan.pdf
Tài liệu liên quan