Trong bài 6 người học sẽ tìm hiểu về lập trình đồng bộ và bất đồng bộ trong Windows Phone. Các nội dung chính được trình bày trong bài giảng này gồm có: Khái niệm đồng bộ và bất đồng bộ, Async method, BackgroundWorker, Task. Mời các bạn cùng tham khảo.
AMBIENT/
Chủ đề:
Nội dung Text: Bài giảng Lập trình Windows Phone (Module 3): Bài 6 - Trần Duy Thanh
- Trường ĐH Khoa Học Tự Nhiên TP.HCM
TRUNG TÂM TIN HỌC
Lập trình Windows Phone
Module 3 – Bài 6: Lập trình đồng
bộ và bất đồng bộ
GV Biên soạn: Trần Duy Thanh
2014
- Nội dung
•
Khái niệm đồng bộ và bất đồng bộ
•
Async method
•
BackgroundWorker
•
Task
Synchronous và Asynchronous Programming 2
- Khái niệm đồng bộ và bất
đồng bộ
Synchronous (đồng bộ)
Asynchronous (bất đồng bộ)
Synchronous và Asynchronous Programming 3
- Khái niệm đồng bộ và bất
đồng bộ
Synchronous và Asynchronous Programming 4
- Async method
Synchronous và Asynchronous Programming 5
- Async method
private async void startButton_Click(object sender,
RoutedEventArgs e)
{
// ONE
Task getLengthTask = AccessTheWebAsync();
// FOUR
int contentLength = await getLengthTask;
// SIX
resultsTextBox.Text +=
String.Format("\r\nLength of the downloaded
string: {0}.\r\n", contentLength);
} Synchronous và Asynchronous Programming 6
- Async method
async Task AccessTheWebAsync()
{
// TWO
HttpClient client = new HttpClient();
Task getStringTask =
client.GetStringAsync("http://msdn.microsoft.com");
// THREE
string urlContents = await getStringTask;
// FIVE
return urlContents.Length;
Synchronous và Asynchronous Programming 7
- BackgroundWorker
BackgroundWorker là một lớp cho phép ta viết
đa tiến trình để cập nhật giao diện ở thời gian
thực, nằm trong thư viện
System.ComponentModel
BackgroundWorker bw = new BackgroundWorker();
//hỗ trợ cho phép hủy
bw.WorkerSupportsCancellation = true;
//hỗ trợ cho phép cập nhật
bw.WorkerReportsProgress = true;
//sự kiện để kích hoạt băt đầu chạy BackgroundWorker
bw.DoWork += bw_DoWork;
//Sự kiện để cập nhật
bw.ProgressChanged += bw_ProgressChanged;
//sự kiện đánh dấu là đã xong 8
Synchronous và Asynchronous Programming
bw.RunWorkerCompleted += bw_RunWorkerCompleted;
- BackgroundWorker
bw.RunWorkerAsync();
private void bw_DoWork(object sender,
DoWorkEventArgs e) {
bw.ReportProgress(i * 10); }
private void bw_ProgressChanged(object sender,
ProgressChangedEventArgs e) {
…
}
private void bw_RunWorkerCompleted(object sender,
RunWorkerCompletedEventArgs e) {
…
} Synchronous và Asynchronous Programming 9
- Task
•
Runchạy bằng hàm Run
•
Start chạy bằng hàm Start
•
StartNew chạy bằng hàm StartNew
•
ContinueWithChạy Chuỗi tác vụ
•
Resultlấy kết qủa trả về
•
Wait & WaitAllchờ 1 tác vụ, nhiều tác vụ
Synchronous và Asynchronous Programming 10
- Run
public int Fib(int n){
if (n Fib(10));
MessageBox.Show("Fib="+task.Result);
Synchronous và Asynchronous Programming 11
- Start
int[] nums = { 2,19, 17, 21, 4, 13, 8, 12, 7, 3, 5 };
var f0 = new Task(() => nums.Average());
f0.Start();
Synchronous và Asynchronous Programming 12
- StartNew
int n = 5;
var task = Task.Factory.StartNew(() => Fib (n));
Synchronous và Asynchronous Programming 13
- ContinueWith
var t1 = new Task(DoOnFirst);
var t2 = t1.ContinueWith(DoOnSecond);
t1.Start();
Synchronous và Asynchronous Programming 14
- Wait & WaitAll
var task = Task.Factory.StartNew(() =>
{
int n = 5;
int s = 0;
for (int i = 1; i
- Wait & WaitAll
public int Func1(int x) {return x * 2;}
public void Func2()
{….
}
var task1 = Task.Factory.StartNew(() => Func1(6));
var task2 = Task.Factory.StartNew(() => Func2());
Task.WaitAll(task1, task2);
MessageBox.Show("x của task1="+task1.Result);
Synchronous và Asynchronous Programming 16
- Thảo luận
Synchronous và Asynchronous Programming 17