There is a new Thai restaurant in town!
" + "I ate there last night and it was fabulous.
" + "Make sure and check it out!
" + " " + " " + " " + " Pilar Ackerman" + " packerman@contoso.com" + " " + ""; // Gửi request tới URL cụ thể client.UploadStringAsync(new create?blogID=1234", UriKind.Absolute), postRequest); } Uri("http://blogs.contoso.com/post- // Hóng kiện UploadStringCompleted void client_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e) { // Hiển thị kết nhận if (e.Error != null) tb1.Text = e.Error.Message; else tb1.Text = e.Result; } 1.6 Infoway Solutions CHƯƠNG VIII: GIAO TIẾP MẠNG TRONG SILVERLIGHT Các hạn chế truy cập mạng với silverlight Phiên Silverlight hỗ trợ hai kiểu sau để ứng dụng kết nối tới máy chủ từ xa: • • Lớp WebClient lớp HTTP có namespace System.Net – lớp sử dụng giao thức HTTP or HTTPS cho giao tiếp mạng Những lớp Sockets namespace System.Net.Sockets – lớp cung cấp interface mức độ thấp socket sử dụng rộng cách rộng rãi giao tiếp mạng Ở hai trường hợp trên, cần phải cung cấp bảo mật ngăn chặn ứng dụng Silverlight kết nối tới từ kết nối không phép Những mối đe doạ cơng từ mạng bao gồm: • • • Tấn công từ trối dịch vụ (DoS) – Một số lượng lớn máy từ xa sử dụng nhằm mục tiêu công vào trang web để mục tiêu request dịch vụ hợp lệ Tấn công thay đổi thông tin DNS – Sử dụng DNS để quản lý máy chủ cập nhật lại tên máy chủ tới địa IP nạn nhân, cho phép truy cập vào máy chủ khác vào máy chủ thực website Reverse tunnel attack – Use a remote client’s outgoing connection as a back tunnel to the client’s private network Các sách bảo mật hệ thống kết hợp Silverlight thiết kế để ngăn chặn mối đe dọa mạng Ngồi ra, hệ thống sách nhằm mục đích cung cấp cho quản trị viên kiểm soát nhiều nguồn lực từ xa mà khách hàng phép để kết nối đến Trước thiết kế cho mạng có khả bổ sung giới hạn kết nối đến máy chủ trang web web gốc Điều có nghĩa trang web đó, ứng dụng giao tiếp lại cho triển khai máy chủ, đó, mạng lưới ứng dụng phép để kết nối đến máy chủ mà từ chúng tải Silverlight bao hỗ trợ kết nối cross-domain cho phép ứng dụng để truy cập vào tài nguyên từ địa điểm khác(sub domaint, ) với trang web gốc Đây tính quan trọng để tạo điều kiện cho ứng dụng Silverlight sử dụng dịch vụ có web Các sách an ninh hệ thống Silverlight runtime bây giờ, đòi hỏi tập tin cross-domain policy tải trước kết nối phép truy cập vào tài ngun Điều ảnh hưởng đến sách bảo mật hệ thống domain qua mạng truy cập cho WebClient HTTP lớp namespace System.Net Đối với sockets, sách an ninh hệ thống Silverlight ảnh hưởng đến quyền truy cập trang web gốc cross-domain Chính sách bảo mật bắt buộc cho kết nối kiểu socket, chí kết nối lại tới trang web Điều Infoway Solutions CHƯƠNG VIII: GIAO TIẾP MẠNG TRONG SILVERLIGHT khác từ hành vi ứng xử Silverlight Beta 1, nơi socket cho phép kết nối cho phép từ site gốc Các nội dung phần cung cấp thông tin chi tiết việc làm để sử dụng hệ thống sách bảo mật Silverlight mơ tả sách tập tin định dạng hỗ trợ 2.1 Khái niệm sách bảo mật hệ thống Silverlight hỗ trợ hai loại tập tin quy định cách ứng sử bảo mật: Tập tin sách Adobe Flash - crossdomain.xml Tập tin sách sử dụng WebClient lớp HTTP namespace System.Net Qua tập tin sách Flash, cho phép truy cập vào tất tên miền sử dụng Silverlight Tập tin sách Silverlight – clientaccesspolicy.xml Tập tin sử dụng lớp WebClient lớp HTTP namespace System.Net cho lớp sockets namespace System.Net.Sockets Tập tin sách định dạng khác với tập tin sách Flash Trước cho phép kết nối với tài nguyên mạng, Silverlight cố gắng tải tập tin sách bảo mật từ tài nguyên mạng Có hai phương pháp khác sử dụng để tải sách bảo mật mà phụ thuộc vào việc kết nối request từ WebClient HTTP lớp request kết nối từ sockets Nếu yêu cầu kết nối từ WebClient lớp HTTP tới cross-domain site, Silverlight cố gắng tải tập tin sách bảo mật cách sử dụng giao thức HTTP Silverlight cố gắng tải tập tin sách Silverlight với tên "clientaccesspolicy.xml" gốc site mục tiêu cách sử dụng giao thức HTTP Nếu tập tin sách Silverlight trả lại (thậm chí có lỗi phân tích cú pháp tập tin), sử dụng sách cho tập tin mà request cross-domain tất request tới máy chủ cho phiên làm việc ứng dụng Silverlight Nếu tập tin sách Silverlight khơng tìm thấy, Silverlight sau cố gắng tải tập tin sách Flash có tên "crossdomain.xml" gốc site mục tiêu yêu cầu cách sử dụng giao thức HTTP Các sách tập tin Flash phải cho phép kết nối đến tất tên miền cho sử dụng Silverlight WebClient lớp HTTP Infoway Solutions CHƯƠNG VIII: GIAO TIẾP MẠNG TRONG SILVERLIGHT Nếu yêu cầu kết nối từ sockets cho trang web (cross-domain site site gốc), Silverlight cố gắng để mở kết nối TCP vào cổng 943 trang web mục tiêu Nếu kết nối TCP thiết lập, Silverlight gửi chuỗi đặc biệt đến server để yêu cầu tập tin sách Silverlight Silverlight đợi để sau nhận trả lời từ web mục tiêu có chứa tập tin sách Silverlight Nếu tập tin sách Silverlight trả lại (thậm chí có lỗi phân tích cú pháp tập tin), sử dụng tập tin sách cho request socket tất request cho trang web mục tiêu tất session ứng dụng Silverlight Nếu tập tin sách tải thành cơng phân tích cú pháp cho phép, cuối mở kết nối đến host mục tiêu Nếu tập tin sách tải khơng hợp lệ khơng thể phân tích cú pháp cách xác, sau kết nối tới tài ngun mạng Silverlight bị từ chối yêu cầu kết nối khơng thành cơng Nếu khơng có sách tập tin tìm thấy, sau kết nối vào mạng nguyên bị từ chối Silverlight yêu cầu kết nối không thành công Bổ sung hạn chế cách sử dụng lớp sockets ứng dụng mạng cho phép kết nối với cổng phạm vi 4502-4534 Ứng dụng Silverlight phép kết nối tới cổng sử dụng socket Nếu cổng mà bạn truy cập phạm vi cổng này, cố gắng kết nối thất bại Để triển khai tập tin sách bảo mật sử dụng kết nối từ WebClient lớp HTTP, quản trị viên hệ thống cần phải cấu hình Web service cho địa IP mà cung cấp cho tập tin định nghĩa sách tạo tập tin sách bảo mật Flash Silverlight để tìm thấy qua giao thức HTTP Để triển khai tập tin sách bảo mật máy cho socket, quản trị viên hệ thống cần phải cấu hình dịch vụ xác thực riêng biệt cổng 943 cho địa IP cung cấp định nghĩa tập tin sách Truy cập web service silverlight Ứng dụng máy khách Silverlight chạy trình duyệt thường cần phải kết nối tới nhiều nguồn sở liệu khác Một ví dụ điển hình việc truy cập liệu vào sở liệu từ máy chủ hiển thị lên giao diện người dùng Silverlight Kịch phổ biến khác cập nhật liệu service thông qua ứng dụng Silverlight để truyển tải thơng tin tới service Những nguồn liệu thường lấy từ Web service Những service SOAP service tạo sử dụng Windows Infoway Solutions CHƯƠNG VIII: GIAO TIẾP MẠNG TRONG SILVERLIGHT Communication Foundation(WCF) vài tảng SOAP khác đơn giản HTTP Service tĩnh Ứng dụng Silverlight máy khách truy cập Web service trực tiếp sử dụng proxy sinh từ metadata published service.Silverlight cung cấp tính cần thiết để làm việc với loạt định dạng liệu sử dụng Service Bao gồm định dạng XML, JSON, RSS, Atom Những định dạng liệu truy cập sử dụng Serialization components, Linq to XML, Linq to JSON, Syndication components 3.1 • Bảo mật cho truy cập Service Bảo vệ ứng dụng máy khách Silverlight liệu người dùng Để bảo vệ ứng dụng silverlight khỏi service độc hại, bạn phải biết số vấn đề bảo mật đây: + Service gửi thông tin mà làm cho ứng dụng máy khách Silverlight trình duyệt người dụng bị treo lỗi Điều với liệu có định dạng XML, JSON, RSS, Atom SOAP Để tránh việc cần thực sau: + Tránh khởi tạo giao tiếp tới service không tin tưởng mà bị lỗi treo gây liệu ứng dụng người dùng Ví dụ, lưu lại cơng việc người dùng xuống máy trước khởi tạo giao tiếp + Tránh tự động khởi tạo tới service không tin tưởng, mà không cho phép người dùng lựa chọn Điều dẫn tới ứng dụng bạn khơng thể dùng Hãy ghi nhớ dịch vụ độc hại khơng ln trả liệu độc hại • Bảo vệ Service Hãy ghi nhớ service mà bạn publish cho ứng dụng máy khách Silverlight truy cập người sử dụng với cách mà bạn khơng mong đợi Xem xét việc phòng ngừa sau đây: + Không nên đưa liệu thừa với mục đích sử dụng + Chắc chắn sử dụng xác thực người dùng thích hợp mặt cơng nghệ 3.2 Tạo Service vượt qua phạm vi domain Để cho phép Silverlight quản lý quyền truy cập vào service domain khác, service phải tuỳ chỉnh rõ ràng cross-domain phép truy cập Bằng việc tuỳ chỉnh, Silverlight control truy cập tới service cách thật an tồn, mà khơng gây ảnh hưởng xấu đến liệu mà lưu trữ service Infoway Solutions CHƯƠNG VIII: GIAO TIẾP MẠNG TRONG SILVERLIGHT Silverlight hỗ trợ hai chế khác cho service để tuỳ chỉnh quyền truy cập crossdomain: - Đặt tập tin clientaccesspolicy.xml gốc domain nơi mà service lưu trữ để thiết lập quyền truy cập cross-domain tới service - Đặt tập tin crossdomain.xml hợp lệ gốc domain nơi service lưu trữ Tập tin phải đánh dấu public cho toàn domain • Sử dụng tập tin clientaccesspolicy.xml phép truy cập cross-domain Tạo service cho phép máy khách Silverlight truy cập Tạo tập tin clientaccesspolicy.xml, cho phép truy cập vào service Thiết lập cho phép truy cập từ domain tới nguồn tài nguyên domain • Lưu tập tin clientaccesspolicy.xml tới gốc domain nơi service lưu trữ Cho ví dụ này, service lưu trữ http://fabrikam.com tập tin phải đặt http://fabrikam.com/clientaccesspolicy.xml Sử dụng tập tin crossdomain.xml phép truy cập cross-domain Tạo service cho phép Silverlight client truy cập Tạo tập tin crossdomain.xml có thiết lập Tập tin phải cấu hình phép truy cập vào service từ tên miền khác, khơng nhận Silverlight Infoway Solutions CHƯƠNG VIII: GIAO TIẾP MẠNG TRONG SILVERLIGHT Lưu tập tin crossdomain.xml vào gốc domain nơi mà service lưu trữ máy chủ Ví dụ, service lưu trữ máy chủ http://fabrikam.com tập tin phải đặt http://fabrikam.com/crossdomain.xml Làm việc với socket Namespace System.Net.Sockets thêm vào phiên Silverlight cung cấp quản lý việc triển khai thực socket giao tiếp mạng cho người lập trình viên mà cần phải kiểm soát chặt chẽ quyền truy cập vào mạng Trên Windows, System.Net.Sockets cung cấp tên quản lý việc triển khai thực Windows sockets (Winsock) Với Apple hệ điều hành Mac OS X, namespace System.Net.Sockets cung cấp, quản lý việc triển khai thực sockets dựa Berkeley Software Distribution (BSD) UNIX Namespace System.Net.Sockets cung cấp chế cho thời gian thực, hai giao tiếp với mạng lưới tài nguyên từ xa cho phép mức độ cao API để giao tiếp qua bi-directional Điều cho phép ứng dụng để nội tác client với service TCP 4.1 Hỗ trợ giao thức mạng Namespace System.Net.Sockets hỗ trợ việc sử dụng giao thức IPv4 hay IPv6 cần mạng máy tính kích hoạt hỗ trợ cho IPv4 IPv6 Các lớp thêm vào namespace System.Net Silverlight để làm việc với System.Net.Sockets Những lớp bao gồm sau đây: + EndPoint - xác định địa mạng Đây lớp trừu tượng + DnsEndPoint - đại diện cho mạng lưới endpoint tên máy chủ chuỗi ký tự đại diện địa IP số cổng + Ipaddress - Cung cấp địa giao thức mạng (IP) + IPEndPoint - đại diện cho mạng lưới endpoint địa IP số cổng + SocketAddress – Lưu trữ thông tin xếp kế thừa từ lớp EndPoint Lớp Socket cung cấp tập hợp phương thức cho giao tiếp mạng Lớp Socket cho phép bạn thực thi bất đồng việc truyền tải liệu sử dụng giao thức giao Infoway Solutions CHƯƠNG VIII: GIAO TIẾP MẠNG TRONG SILVERLIGHT tiếp liệt kê kiểu ProtocolType Hiện tại, Silverlight hỗ trợ loại giao thức TCP Một hạn chế việc sử dụng sockets Silverlight cổng phải phạm vi 4502-4534 Chỉ cổng cho phép kết nối cách sử dụng sockets ứng dụng Silverlight Nếu kết nối đến cổng phạm vi cổng này, việc kết nối khơng thành cơng 4.2 Lập trình mạng với Socket Lớp Socket cho phép bạn thực thi bất đồng truyền tải liệu sử dụng phương thức sau đây: + ConnectAsync - Bắt đầu Asynchronous request tới máy chủ + SendAsync - Ghi liệu từ hay nhiều buffers tới Socket kết nối + ReceiveAsync - Đọc liệu vào nhiều buffers từ Socket kết nối + Shutdown - Kết thúc thao tác gửi chờ, tín hiệu endpoint kết nối bị đóng lại Nếu việc gửi xác định, liệu nhận máy chủ kết thúc kết nối (chỉ nhận byte) + Close - Là đóng kết nối máy chủ lưu trữ tất tài ngun quản lý khơng quản lý có liên quan tới Socket Trong lớp Socket, hoạt động asynchronous Socket mô tả khả dùng lại System.Net.Sockets.SocketAsyncEventArgs phân bổ trì đối tượng ứng dụng Các ứng dụng tạo SocketAsyncEventArgs đối tượng mà cần Ví dụ, ứng dụng Silverlight cần phải có 10 Socket cho thao tác lúc, phân bổ 10 SocketAsyncEventArgs cho đối tượng trường hợp Vòng đời SocketAsyncEventArgs sử dụng asynchronous Socket động xác định tham chiếu tới mã ứng dụng tham chiếu tới asynchronous I / O Nó khơng cần thiết cho ứng dụng để trì tham chiếu cho đối tượng SocketAsyncEventArgs sau gửi tham số vào phương pháp asynchronous Socket Nó tham chiếu trả hồn tất Tuy nhiên, lợi cho ứng dụng để giữ lại tham chiếu đến đối tượng SocketAsyncEventArgs để tái sử dụng cho asynchronous socket hoạt động Mã hóa liệu service Namespace System.Security.Cryptography chứa lớp mà cho phép bạn thực hai loại mã hoá đối xứng mã hoá bất đối xứng, tạo hashes chữ ký số, số ngẫu nhiên Phần mô tả cách thức để tạo mã hash chữ ký số Infoway Solutions CHƯƠNG VIII: GIAO TIẾP MẠNG TRONG SILVERLIGHT Các bạn dọc thêm NET Framework, Cryptographic Services Infoway Solutions CHƯƠNG IX: HIỆU SUẤT HOẠT ĐỘNG TRONG ỨNG DỤNG SILVERLIGHT CHƯƠNG IX: HIỆU SUẤT HOẠT ĐỘNG TRONG ỨNG DỤNG SILVERLIGHT Làm để chương trình bạn chạy nhanh ổn định Để ứng dụng bạn hoạt động ổn định với hiệu suất cao bạn cẩn phải chọn phương án khả thi tối ưu tránh sai lầm việc lựa chọn phương án Chúng đưa số gợi ý giúp cho ứng dụng chạy nhanh hiệu 1.1 Thử nghiệm nhiều hệ điều hành trình duyệt Nếu bạn phát triển Silverlight dành cho ứng dụng dựa nhiều hệ điều hành (ví dụ: máy Macintosh, Windows) trình duyệt (ví dụ: Internet Explorer, Mozilla Firefox, Apple Safari) bạn nên thường xuyên kiểm tra ứng dụng bạn tảng trình duyệt mà bạn nhắm tới Những khác tảng cách thức hoạt động trình duyệt, mã Silverlight lập trình ứng dụng ảnh hưởng đến hiệu suất ứng dụng Bạn nên kiểm tra kỹ lưỡng bạn tạo ứng dụng có sử dụng nhúng plug-in có kiểm trứng minh bạch nguồn gốc plug-in 1.2 Đặt EnableFrameRateCounter cho thời gian phát triển Hiệu suất render plug-in khác với thông số liệu phức tạp Chúng khuyên bạn nên đặt EnableFrameCounter trình phát triển Thiết lập hiển thị khung hình giây (fps: frame per second) Silverlight trạng thái trình duyệt, bạn tinh chỉnh ứng dụng bạn với yêu cầu mà bạn đặt ra: Fps: currentFramerate / maxFramerate CurrentFramerate số tỷ lệ khung hình giây hành ứng dụng dựa điểu kiện môi trường plug-in maxFramerate số tỉ lệ khung hình tối đa cấu hình thông qua tham số framerate initialization giá trị maxFramerate giá trị tới hạn, nghĩa trường hợp số thực tế currentFramerate thấp maxFramerate Ví dụ bạn vào trang HTML Silverlight maxFramerate mạc định 24khung hình / giây 1.3 Sử dụng Transparent Background Sử dụng Transparent background hữu ích với ví dụ sau: bạn muốn hiển thị đồng thời giao thoa lớp đối tượng đồ họa chồng lớp lên image, shape Tuy nhiên tránh việc lạm dụng Transparent background đâu, làm ảnh hưởng đến hiệu suất hoạt động ứng dụng 1.4 Tránh việc sử dụng kịch làm biến đổi kích cỡ font Text Thay đổi kích cỡ Text ảnh hưởng tiêu tốn nhiều tài nguyên hệ thống, Silverlight sử dụng hinting để làm mịn văn render text Nếu bạn biến đổi text size transform thuộc tính FontSize Silverlight làm mịn lại tồn text cho frame, việc dó làm tiêu tốn tài nguyên Infoway Solutions CHƯƠNG IX: HIỆU SUẤT HOẠT ĐỘNG TRONG ỨNG DỤNG SILVERLIGHT Nếu ứng dụng bạn đòi hỏi phải thay đổi quy mơ văn lớn, tốt sử dụng đồ họa vector làm đại diện văn 1.5 Tránh sử dụng chế độ Windowless Chỉ nên đặt thuộc tính Windowless cần thiết Hiệu suất bị ảnh hưởng nghiêm trọng chế độ Windowless Do khuyến cáo bạn không nên sử dụng chế độ 1.6 Sử dụng Visibility thay cho việc sử dụng Opacity nhiều trường hợp khơng cần đến có mặt Opacity Nếu bạn đơn giản muốn thực tắt hiển thị đối tượng hồn tồn khơng nên sử dụng thuộc tính opacity, trường hợp tơi khun bạn nên sử dụng thuộc tính Visibitily Opacity sử dụng chi phí tài ngun cao đối tượng sử dụng kỹ thuật Rendered Sử dụng Visibility để tránh việc lãng phí tài nguyên 1.7 Silverlight sử dụng Multi-Core Rendering Media Silverlight mang lại ưu điểm Multi-core cho Render đồ họa Media Bởi ứng dụng Silverlight bạn chạy nhanh hệ thống Multi-core( đa lõi) 1.8 Trong chế độ Full-Screen, ẩn đối tượng không sử dụng Khi ứng dụng bạn chế độ Full-Screen, ẩn đối tượng không Render ngắt kết nối chúng Bạn ẩn đối tượng tùy chỉnh thuộc tính Visibility Collapsed 1.9 Tránh sử dụng thuộc tính Width Height đối tượng MediaElement Tránh việc thiết lập Width Height đối tượng MediaElement Thay vào cho phép MediaElement hiển thị kích cỡ tự nhiên Nếu bạn cần thay đổi kích cỡ hình hiển thị Element, cách tốt mã hóa lại file Media với kích cỡ mong muốn cơng cụ khác 1.10 Tránh sử dụng thuộc tính Width Height đối tượng Path Tránh thiết lập thuộc tính Width, Height cho đối tượng Path Thiết lập thuộc tính bổ sung stretching tự động nới rộng phạm vi ảnh hưởng đến hiệu suất Thay vào vào tọa đọ rõ ràng đối tượng Path điều khiển hình dạng vị trí nó, Width Height tự động set 1.11 Nguy đổ vỡ CPU sử ly cường độ lớn công việc Khi thực thi mã code (C# hay VisualBasic) plug-in ngừng vẽ Thông thường điều vấn đề ta thực công việc tối thiểu mà dễ dàng kiểm sốt Tuy nhiên ứng dụng có quy mơ tương đối có sử dụng lập trình thread, khuyên bạn nên chia nhỏ công việc tác vụ Điều cho phép ứng dụng Render theo kịp với tỷ lệ Frame mong muốn Infoway Solutions CHƯƠNG IX: HIỆU SUẤT HOẠT ĐỘNG TRONG ỨNG DỤNG SILVERLIGHT 1.12 Nguy đổ vỡ ứng dụng có Package lớn Trong số trường hợp Silverlight plug-in thành công chạy ứng dụng có tập tin (.Xap) lớn, bạn cần cân nhắc tập chung số nguồn lực, tập hợp thư viện vào modul riêng biệt tải theo yêu cầu nhằm tối ưu hóa hệ thống nguồn lực 1.13 Sử dụng Double.ToString(CultureInfo.InvariantCulture) hiệu Double.ToString() Phương thức Double.ToString(IFormatProvider) cung cấp giá trị CultureInfo.InvariantCulture tối ưu hóa hiệu suất Tổng quan phương thức Double.ToString(CultureInfo.InvariantCulture) thực thi tốt bạn không muốn hiển thị liệu tới người dung dùng cho việc so sánh String Nếu ứng dụng bạn hiển thị số tới người dùng bạn muốn hiển thị chúng xác, bạn nên sử dụng phương thức Double.ToString(IFormatProvider) với giá trị CultureInfo.CurrentCulture Với yếu tố hữu ích bạn nên thực việc chuyển đổi Sử dụng BackGroundWorker 2.1 Bắt đầu với việc tạo BackGroundWorker C# BackgroundWorker bw = new BackgroundWorker(); // Xác thuộc tính để hệ thống background cho phép hủy bỏ báo cáo tiến trình bw.WorkerSupportsCancellation = true; bw.WorkerReportsProgress = true; 2.2 Tạo Event handler cho background worker DoWork event DoWork event handler nơi mà bạn chạy hệ thống thread Bất kỳ thay đổi hệ thống thông qua đối số DoWorkEventArgs đối tượng thơng qua với kiện handler Để thơng báo tiến trình quay trở lại gọi tới hàm ReportProgress thơng qua hồn thành giá trị từ đến 100 ReportProgress gây lên kiện ProgressChanged mà bạn xử lý riêng biệt Chú ý: báo cáo tiến trình WorkerReportsProgress BackGroundWorker khơng đặt True mà bạn gọi thủ tục ReportProgress, ngoại lệ xảy Để xác định xem có yêu cầu chờ thực thi yêu cầu hủy bỏ background ngầm, kiểm tra thuộc tính CancellationPending BackgroundWorker Nếu thuộc tính trả True thủ tục CancelAsync gọi Đối tượng BackGroundWorker hủy bỏ hệ thống dừng lại Để chuyển liệu quay trở lại trình xử lý, thiết lập thuộc tính cho DoWorkEventArgs đối tượng thông qua với kiện handler Giá trị đọc mà RunWorkerCompleted kiện gây kết thúc hệ thống C# Infoway Solutions CHƯƠNG IX: HIỆU SUẤT HOẠT ĐỘNG TRONG ỨNG DỤNG SILVERLIGHT private void bw_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; for (int i = 1; (i