2012-04-11 46 views
6

Tôi đang chuyển một số luồng .NET tùy chỉnh sang WINRT. Ngôn ngữ là C#.Cách triển khai IAsyncOperationWithProgress

Có một số ví dụ về triển khai IAsyncOperationWithProgress không? Vì phương thức ReadAsync, WriteAsync từ Windows.Storage.Streams yêu cầu chúng. Triển khai luồng WinRT tùy chỉnh cũng được hoan nghênh.

Tôi đã tìm thấy một số ví dụ C bằng cách sử dụng create_async, nhưng tôi đang tìm cách thực hiện điều này trong C# và tôi không thể tìm thấy create_async trong khung Metro.

Cảm ơn trước

+0

Những phương pháp đó * trả lại * triển khai - bạn không phải tự mình triển khai chúng. –

+0

Tôi muốn chuyển các luồng tùy chỉnh, Giống như 'Tệp bộ nhớ ngẫu nhiên đã lưu vào bộ nhớ cache'. Vì vậy, tôi phải tự cung cấp những phương pháp đó. –

Trả lời

-1

Đối với C#, bạn nên kiểm tra this //build talk on async programming.

Nếu bạn đang sử dụng cấp cao C++, bạn nên xem this bài viết về cách thực hiện các hoạt động không đồng bộ trong PPL.

Nếu bạn cần triển khai hoạt động không đồng bộ của chính mình từ cấp độ C++ thấp, bạn nên xem lớp học WRL::AsyncBase.

+0

Cảm ơn những lời khuyên, ngôn ngữ vẫn C#: o, video thực sự xóa một số nghi ngờ. Tôi chỉ tìm thấy với sự giúp đỡ này, lớp trợ giúp AsyncInfoFactory chịu trách nhiệm tạo AsyncOperations. –

+1

Tôi xin lỗi vì -1, nhưng tôi đã xem toàn bộ video dài 60 phút tìm kiếm mẫu mã của IAsyncOperationWithProgress và không có gì lưu một đề cập ngắn gọn về khả năng ở 58:00. –

3

Dưới đây là ví dụ về việc sử dụng IAsyncOperationWithProgress để hiển thị tiến trình cài đặt tệp XAP theo chương trình. Tôi khá mới để phát triển Win8 vì vậy không chắc chắn nếu nó hoàn toàn thành ngữ.

Lưu ý Dispatcher.BeginInvoke để kết hợp lại tiến trình quay lại luồng giao diện người dùng. Hy vọng điều này sẽ giúp:

private async void InstallApp(string name, Uri uri) 
{ 
    try 
    { 
     StatusTextBlock.Text = "Installing app"; 
     var installTask = InstallationManager.AddPackageAsync(name, uri); 

     installTask.Progress = (installResult, progress) => Dispatcher.BeginInvoke(() => 
     { 
      StatusTextBlock.Text = "Progress: " + progress; 
     }); 

     var result = await installTask; 
     StatusTextBlock.Text = "Done: " + result.InstallState.ToString(); 
    } 
    catch (Exception ex) 
    { 
     StatusTextBlock.Text = "Failed to install: " + ex.Message; 
    } 
}