Select the product you need help with
Làm th? nào đ? g?i m?t Visual C# phương pháp không đ?ng b?ID c?a bài: 315582 - Xem s?n ph?m mà bài này áp d?ng vào. ? Trang nàyTÓM T?T Microsoft.NET Framework làm cho nó d? dàng đ? g?i
ch?c năng không đ?ng b?. G?i hàm không đ?ng b? gây ra h? th?ng
th?c thi chúng trong b?i c?nh v? m?t ch? đ? ph? trong khi ch?c năng g?i đi?n tho?i
ti?p t?c làm công vi?c khác. Trong m?t cu?c g?i đi?n h?nh ch?c năng (đ?ng b?), các
ch?c năng đư?c thi hành ngay l?p t?c trên cùng m?t s?i mà th?c hi?n cu?c g?i. Các
g?i hàm ch? cho các cu?c g?i đ? hoàn thành và nh?n đư?c các k?t qu? c?a các
g?i trư?c khi ti?p t?c. Ngư?c l?i, khi b?n th?c hi?n cu?c g?i không đ?ng b?, b?n
b?n có th? l?y các k?t qu? c?a các cu?c g?i không đ?ng b? sau này. Bài vi?t này minh ch?ng
làm th? nào đ? làm đi?u này b?ng cách s? d?ng Visual C#. Yêu c?uDanh sách sau v?ch ra ph?n c?ng đư?c đ? ngh?, ph?n m?m, cơ s? h? t?ng m?ng và gói d?ch v? đư?c yêu c?u:
Làm th? nào đ? th?c hi?n cu?c g?i không đ?ng b?Không đ?ng b? các cu?c g?i đư?c th?c hi?n b?ng cách s? d?ng các đ?i bi?u. M?t đ?i bi?u là m?t đ?i tư?ng k?t thúc t?t đ?p m?t ch?c năng. Đ?i bi?u cung c?p m?t ch?c năng đ?ng b? và c?ng cung c?p các phương pháp đ? kêu g?i các ch?c năng gói không đ?ng b?. Các phương pháp đang BeginInvoke() và EndInvoke(). Danh sách các tham s? c?a các phương pháp khác nhau tùy thu?c vào s? ch? k? c?a các ch?c năng ngư?i đ?p k?t thúc t?t đ?p. Lưu ? r?ng Visual Studio .NET IntelliSense tính năng không hi?n th? BeginInvoke() và EndInvoke(), do đó, b?n không th?y chúng xu?t hi?n trong các ch?c năng danh sách khi b?n g?.BeginInvoke() đư?c s? d?ng đ? b?t đ?u cu?c g?i không đ?ng b?. Nó có cùng m?t tham s? là hàm gói, c?ng v?i hai tham s? b? sung s? đư?c miêu t? sau này trong bài vi?t này. BeginInvoke() tr? l?i ngay l?p t?c và không ch? đ?i cho các cu?c g?i không đ?ng b? đ? hoàn thành. BeginInvoke() tr? v? m?t IAsyncResult đ?i tư?ng. Các EndInvoke() ch?c năng đư?c s? d?ng đ? l?y k?t qu? c?a vi?c không đ?ng b? goïi ñeán. Nó có th? đư?c g?i là b?t c? lúc nào sau khi BeginInvoke(). N?u cu?c g?i không đ?ng b? đ? không hoàn thành đư?c nêu ra, EndInvoke() kh?i cho đ?n khi nó hoàn thành. Các tham s? c?a các EndInvoke() ch?c năng bao g?m các trong và REF các tham s? ch?c năng gói có, c?ng v?i các IAsyncResult đ?i tư?ng đư?c tr? v? b?i BeginInvoke(). Sau đây là m?t ví d? v? m?t đ?i bi?u và c?a nó BeginInvoke() và EndInvoke() phương pháp:
Bư?c đ?u tiên là xác đ?nh ngư?i đ?p mà k?t thúc t?t đ?p ch?c năng: M?u 1: Kêu g?i m?t phương pháp đ?ng b?M?u này ch?ng t? làm th? nào đ? g?i LongRunningMethod() đ?ng b? b?ng cách s? d?ng m?t MethodDelegate đ?i bi?u. Các m?u khác ngư?c l?i đi?u này b?ng cách làm cho các cu?c g?i không đ?ng b?.
M?u 2: Kêu g?i m?t phương pháp không đ?ng b? b?ng cách s? d?ng các EndInvoke() Mô h?nh cu?c g?iTrong ph?n này, các m?u invokes các cùng m?t phương pháp không đ?ng b?. Các mô h?nh cu?c g?i đư?c s? d?ng là đ? g?i BeginInvoke, làm m?t s? công vi?c trên ch? đ? chính, và sau đó g?i EndInvoke(). Lưu ? r?ng EndInvoke() không tr? l?i cho đ?n khi cu?c g?i không đ?ng b? đ? hoàn thành. Đi?u này mô h?nh g?i là h?u ích khi b?n mu?n có s?i ch? g?i đi?n tho?i làm vi?c t?i các đ?ng th?i các cu?c g?i không đ?ng b? th?c hi?n. Có làm vi?c x?y ra t?i các đ?ng th?i có th? c?i thi?n hi?u su?t c?a nhi?u ?ng d?ng. Tác v? thông thư?ng đ? ch?y không đ?ng b? b?ng cách này có t?p tin ho?c m?ng ho?t đ?ng.
M?u 3: G?i đi?n cho m?t phương pháp không đ?ng b? và cách s? d?ng m?t WaitHandle đ? ch? cho các cu?c g?i đ? hoàn thànhTrong ph?n này, các m?u g?i các phương pháp không đ?ng b? và ch? đ?i cho m?t WaitHandle trư?c khi nó g?i EndInvoke(). Các IAsyncResult đó là tr? l?i b?i BeginInvoke() có m?t AsyncWaitHandle b?t đ?ng s?n. Đ?c tính này tr? v? m?t WaitHandle đó báo hi?u khi đ? hoàn t?t các cu?c g?i không đ?ng b?. Đang ch? m?t WaitHandle là m?t k? thu?t ph? bi?n ch? đ? đ?ng b? hóa. Các ch? đ? cu?c g?i ch? đ?i các WaitHandle b?ng cách s? d?ng các WaitOne() phương pháp c?a các WaitHandle. WaitOne() ch?n cho đ?n khi các WaitHandle báo hi?u. Khi WaitOne() tr? v?, b?n có th? làm m?t s? công vi?c b? sung trư?c khi b?n g?i EndInvoke(). Như trong m?u trư?c đó, k? thu?t này r?t h?u ích cho th?c hi?n các ho?t đ?ng t?p tin ho?c m?ng mà n?u không s? ch?n các cu?c g?i ch? đ? chính.
M?u 4: Kêu g?i m?t phương pháp không đ?ng b? b?ng cách s? d?ng m?u Polling CallTrong ph?n này, các m?u cu?c thăm d? các IAsyncResult đ?i tư?ng đ? t?m ra khi các cu?c g?i không đ?ng b? đ? hoàn thành. Các IAsyncResult đ?i tư?ng đư?c tr? v? b?i BeginInvoke() có m?t IsCompleted b?t đ?ng s?n tr? v? S? th?t sau khi hoàn t?t cu?c g?i không đ?ng b?. B?n có th? sau đó g?i EndInvoke(). Mô h?nh cu?c g?i này r?t h?u ích n?u ?ng d?ng c?a b?n không liên t?c làm vi?c mà b?n không mu?n có ch?n b?i m?t cu?c g?i dài ch?y ch?c năng. A ?ng d?ng Microsoft Windows là m?t ví d? v? đi?u này. Ch? đ? chính c?a các ?ng d?ng Windows có th? ti?p t?c x? l? các đ?u vào ngư?i dùng trong khi m?t không đ?ng b? th?c hi?n m?t cu?c g?i. Nó có th? ki?m tra đ?nh k? IsCompleted đ? xem n?u cu?c g?i đ? hoàn thành. Nó g?i EndInvoke Khi IsCompleted tr? v? S? th?t. B?i v? EndInvoke() ch?n cho đ?n khi các ho?t đ?ng không đ?ng b? đư?c hoàn t?t, các ?ng d?ng không g?i nó cho đ?n khi nó bi?t r?ng chi?n d?ch đư?c hoàn t?t.
M?u 5: Th?c hi?n m?t g?i l?i khi hoàn t?t m?t phương pháp không đ?ng b?Trong ph?n này, các m?u cung c?p m?t đ?i bi?u g?i l?i đ? các BeginInvoke() ch?c năng h? th?ng th?c hi?n khi nào cu?c g?i không đ?ng b? đ? hoàn t?t. Các cu?c g?i g?i l?i EndInvoke() và các quá tr?nh k?t qu? c?a các cu?c g?i không đ?ng b?. Cu?c g?i này mô h?nh r?t h?u ích n?u các ch? đ? s? kh?i t?o cu?c g?i không đ?ng b? không c?n đ? x? l? các k?t qu? c?a cu?c g?i. H? th?ng invokes g?i l?i trên m?t ch? đ? khác v?i các ch? đ? initiating khi đ? hoàn t?t các cu?c g?i không đ?ng b?.S? d?ng mô h?nh cu?c g?i này, b?n ph?i vư?t qua m?t đ?i bi?u c?a các lo?i AsyncCallback như tham s? th? hai đ? cu?i cùng c?a các BeginInvoke() ch?c năng. BeginInvoke() c?ng có m?t tham s? cu?i cùng c?a lo?i đ?i tư?ng vào đó b?n có th? vư?t qua b?t k? đ?i tư?ng. Đ?i tư?ng này là dành cho c?a b?n ch?c năng g?i l?i khi nó đư?c vi?n d?n. M?t trong nh?ng s? d?ng quan tr?ng cho tham s? này là ph?i vư?t qua các đ?i bi?u đư?c s? d?ng đ? b?t đ?u cu?c g?i. G?i l?i ch?c năng có th? sau đó s? d?ng các EndInvoke() ch?c năng đó đ?i bi?u đ? hoàn thành các cu?c g?i. Đây là mô h?nh cu?c g?i đư?c th? hi?n dư?i đây.
Thu?c tínhID c?a bài: 315582 - L?n xem xét sau cùng: 27 Tháng Tám 2011 - Xem xét l?i: 2.0 Áp d?ng
Máy d?ch QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này. Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:315582
(http://support.microsoft.com/kb/315582/en-us/
)
| D?ch tiêu đ?
|




Quay l?i đ?u trang








