我在加载项应用程序中使用async/await遇到问题,我有自定义任务窗格,用户可以用它下载一些数据,所以有问题:
等待操作完成后,控件不会返回到先前的执行上下文.我用windows窗体创建了一个示例并粘贴了相同的方法等待它工作正常 - 我可以在等待操作后使用表单控件,但不是在加载项中,我必须调用自定义任务窗格调用方法.简单的例子:
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();
}));
}
Run Code Online (Sandbox Code Playgroud)在我的加载项中,我需要处理一些事件 - 工作表已更改,工作表已激活/已停用,但这些事件消失,并且在等待操作后未触发,我必须在每次事件后使用"切换"(删除+添加)事件等待使用.简单的例子:
private void ToggleWorkbookEvents()
{
var excel = Globals.MyAddIn.Application;
//need to ensure event will not be set twice
excel.SheetActivate -= CheckSheetForData;
excel.SheetActivate += CheckSheetForData;
if (excel.ActiveWorkbook != null)
{
var activeSheet = Globals.MyAddIn.GetActiveWorksheet();
//need to ensure …Run Code Online (Sandbox Code Playgroud)我需要为我的Vue组件添加"expand/collapse all"功能(一些可折叠面板).
如果用户单击折叠按钮然后单击某个面板并展开它,则单击折叠按钮将不执行任何操作,因为观察的参数不会更改.
那么如何正确实现这个功能(按钮必须总是折叠和扩展组件)?
我准备了简单的例子(抱歉格式不好,在编辑器中看起来不错:():
var collapsible = {
template: "#collapsible",
props: ["collapseAll"],
data: function () {
return {
collapsed: true
}
},
watch: {
collapseAll: function(value) {
this.collapsed = value
}
}
}
var app = new Vue({
template: "#app",
el: "#foo",
data: {
collapseAll: true
},
components: {
collapsible: collapsible
}
});Run Code Online (Sandbox Code Playgroud)
.wrapper {
width: 100%;
}
.wrapper + .wrapper {
margin-top: 10px;
}
.header {
height: 20px;
width: 100%;
background: #ccc;
}
.collapsible {
height: …Run Code Online (Sandbox Code Playgroud)