Tải bản đầy đủ (.pdf) (28 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (459.21 KB, 28 trang )

Object-Oriented Programming Using C#

NGÔN NGỮ LẬP TRÌNH NÂNG CAO

Ver. 1.0

Slide 1 of 21


Object-Oriented Programming Using C#
Mục tiêu
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)

Ver. 1.0

Slide 2 of 21


Object-Oriented Programming Using C#
Nhắc lại
Một vài dẫn xuất trong lớp System.Exception

Ver. 1.0

Lớp Exception

Miêu tả


System.IO.IOException

Xử lý lỗi I/O

System.IndexOutOfRangeException

Xử lý lỗi sinh ra khi một phương thức liên quan tới các thành phần
của mảng mà vượt quá phạm vi của nó

System.NullReferenceException

Xử lý lỗi sinh ra trong quá trình xứ lý đối tượng rỗng (null)

System.DivideByZeroException

Xử lý lỗi sinh ra trong quá trình xử lý phép chia cho 0

System.InvalidCastException

Xử lý lỗi sinh ra trong quá trình ép kiểu

System.OutOfMemoryException

Xử lý khởi tạo bộ nhớ cho ứng dụng bị lỗi

System.ArithmeticException

Xử lý lỗi sinh ra trong các phép toán số học, ép kiểu và chuyển
kiểu.


System.InvalidCastException

Xử lý lỗi khi ép kiểu lỗi

System.ArgumentNullException

Xử lý khi tham số có giá trị rỗng

System.Data.DataException

Xử lý lỗi khi sử dụng thành phần ADO.NET

Slide 3 of 21


Object-Oriented Programming Using C#
Xử lý ngoại lệ
Trong xử lý ngoại lệ, một ứng dụng được chia thành các
khối mã.
Một khối chỉ ra khả năng phát sinh lỗi trong nhiều xử lý
ngoại lệ.
Xử lý ngoại lệ sinh ra một cấu trúc điều khiển và cách thức
chuẩn trong việc xử lý lỗi mức hệ thống và mức ứng dụng.
Khối xử lý ngoại lệ có thể được thực thi sử dụng từ khóa:
try
catch
finally

Chúng ta cùng tìm hiểu chi tiết về các từ khóa.


Ver. 1.0

Slide 4 of 21


Object-Oriented Programming Using C#
Xử lý ngoại lệ (tiếp)

Khối try:
Khối try bao quanh câu lệnh có thể phát sinh một ngoại lệ. Cú
pháp khối try như sau:
try
{
//Các câu lệnh có thể phát sinh ngoại lệ
}
Khối try quản lý các câu lệnh bên trong nó và định nghĩa phạm
vi xử lý ngoại lệ liên quan tới nó.
Khối try phải có ít nhất một khối catch.

Ver. 1.0

Slide 5 of 21


Object-Oriented Programming Using C#
Xử lý ngoại lệ (tiếp)

Khối catch:
Câu lệnh catch 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
}
Ver. 1.0

Slide 6 of 21


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ý.
}
Ver. 1.0

Slide 7 of 21


Object-Oriented Programming Using C#
Ví dụ: Xử lý ngoại lệ

Ver. 1.0

Slide 8 of 21


Object-Oriented Programming Using C#
Ví dụ: Xử lý ngoại lệ cho mảng
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.

Ver. 1.0


Slide 9 of 21


Object-Oriented Programming Using C#
Ví dụ: Quản lý sinh viên
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.

Ver. 1.0

Slide 10 of 21


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.

Ver. 1.0

Slide 11 of 21



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
}
Ver. 1.0

Slide 12 of 21


Object-Oriented Programming Using C#
Thực thi luồng (Thread)
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.

Ver. 1.0

Slide 13 of 21


Object-Oriented Programming Using C#
Thực thi luồng (Thread)
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).

Ver. 1.0

Slide 14 of 21


Object-Oriented Programming Using C#
Thực thi luồng (Thread)
Hình sau miêu tả quá trình xử lý multithreaded.


Ver. 1.0

Slide 15 of 21


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.

Ver. 1.0

Slide 16 of 21


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.

Ver. 1.0

Slide 17 of 21


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.

Ver. 1.0

Slide 18 of 21


Object-Oriented Programming Using C#
Làm việc với Thread
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ỉ.
Ver. 1.0

Slide 19 of 21


Object-Oriented Programming Using C#
Tạo Thread

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

Ver. 1.0


Slide 20 of 21


Object-Oriented Programming Using C#
Ví dụ 1: Tạo Thread
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();
}
}
}
Ver. 1.0

Slide 21 of 21


Object-Oriented Programming Using C#
Ví dụ 2: Tạo Thread

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");
}
}

Ver. 1.0

Slide 22 of 21


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.

Ver. 1.0

Slide 23 of 21


Object-Oriented Programming Using C#
Ví dụ quản lý Thread
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!!!");
}

Ver. 1.0


Slide 24 of 21


Object-Oriented Programming Using C#
Ví dụ quản lý Thread
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();
}
}
}

Ver. 1.0

Slide 25 of 21


×