Tag: async await

使用Excel数据的简单任务不会导致“ContextSwitchDeadlock”

我有一个Excel workbook对象包含一张workbook sheet ,我想将其内容复制到List 。 我有这个方法: private Task GeneratePagesList() { _pages = new List<Model.Page>(); short idCount = 0; var generatePagesListTask = new Task(() => { _pages.Add(new Model.Page() { Url = new Uri(_worksheetRange.Cells[i, j].Value2.ToString(), UriKind.RelativeOrAbsolute), Id = idCount }); }); return generatePagesListTask; } 现在我想要使用这个方法和它返回的Task ,如下所示: public async void ConvertExelDataAsync() { var generatePagesListTask = GeneratePagesList(); generatePagesListTask.Start(); await […]

不正确的asynchronous/等待工作,Excel应用程序级别加载项中的Excel事件

我在加载项应用程序中遇到了使用asynchronous/等待的问题,我有自定义任务窗格,用户可以使用它下载一些数据,所以出现问题: 待完成的操作完成后,控件不会返回到上一个执行上下文。 我用windows窗体创build了示例,并粘贴与等待相同的方法,它工作正常 – 我可以在等待操作后使用窗体控件,但不是在加载中,我不得不调用自定义任务窗格调用方法。 简单的例子: 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(); })); } 在我的插件中,我需要处理一些事件 – 工作表被改变,工作表被激活/停用,但是这些事件消失并且在等待操作之后不被触发,并且我必须在每个事件之后使用诸如“切换”(移除+添加)事件等待使用。 简单的例子: private void ToggleWorkbookEvents() { var excel = Globals.BPNAddIn.Application; //need […]