Tôi gặp phải sự cố khi sử dụng async/await trong ứng dụng bổ trợ của mình, tôi có ngăn tác vụ tùy chỉnh và người dùng có thể tải xuống một số dữ liệu. là vấn đề:Không chính xác không đồng bộ/đang chờ hoạt động, các sự kiện Excel trong Excel Application Level Bổ trợ
Sau khi hoạt động được chờ hoàn thành, kiểm soát không được trả về ngữ cảnh thực thi trước đó. Tôi đã tạo ví dụ với các biểu mẫu cửa sổ và dán cùng một phương thức đang chờ và nó hoạt động tốt - Tôi có thể sử dụng các điều khiển biểu mẫu sau khi chờ hoạt động, nhưng không phải trong bổ trợ, tôi phải gọi ngăn tác vụ tùy chỉnh Gọi phương thức. ví dụ đơn giản:
private void SearchPaneButton_Click(object sender, EventArgs e) { Search(); } private async void Search() { var searchText = SearchTextBox.Text; SearchPaneButton.Text = "Loading…"; var data = await new DataServiceClient().GetDataAsync(searchText); this.Invoke((MethodInvoker)(() => { SearchPaneButton.Text = "Search"; ToggleWorkbookEvents(); })); }
Trong tôi add-in tôi cần phải xử lý một số sự kiện - bảng thay đổi, bảng kích hoạt/vô hiệu hóa, nhưng những sự kiện biến mất và không bị sa thải sau khi chờ đợi hoạt động và tôi phải sử dụng một cái gì đó như "toggling" (xóa + thêm) sự kiện sau mỗi lần chờ sử dụng. ví dụ đơn giản:
private void ToggleWorkbookEvents() { var excel = Globals.BPNAddIn.Application; //need to ensure event will not be set twice excel.SheetActivate -= CheckSheetForData; excel.SheetActivate += CheckSheetForData; if (excel.ActiveWorkbook != null) { var activeSheet = Globals.BPNAddIn.GetActiveWorksheet(); //need to ensure event will not be set twice activeSheet.Change -= Worksheet_Changed; activeSheet.Change += Worksheet_Changed; } }
Vì vậy, có lẽ khuôn khổ VSTO không thể hỗ trợ các tính năng mới (như async chờ) của các phiên bản mới nhất .NET Framework?
Câu hỏi về Stackoverflow phải có mã được liên kết với chúng. Vui lòng chỉnh sửa với nhiều chi tiết hơn để chúng tôi có thể cố gắng giúp đỡ các vấn đề thực tế của bạn. – SpaceSteak
@SpaceSteak Tôi đã thêm một số ví dụ mã, nhờ –
Tại sao bạn không chờ đợi trên 'Tìm kiếm'? –