从Excel功能区打开WPF窗口后,Workbook.SheetChange事件处理程序停止工作

时间:2019-01-09 04:30:43

标签: c# excel wpf

我有一个VSTO Excel加载项,我想在其中使用Workbook.SheetChange事件处理程序捕获工作表中的更改。 我的加载项通过功能区按钮打开WPF窗口,以与用户进行交互并在工作表上执行功能。我发现打开WPF窗口后,我的SheetChange事件处理程序不再触发。

我创建了一个简单的测试加载项来评估不同的用例,并将问题缩小到与WPF窗口有关的范围。 具体来说,当第二次激活窗口或触发GotFocus事件时。

无论是从主线程还是从后台线程运行新窗口(WPF或Form),都会出现问题

当我对Windows窗体窗口运行相同的测试时,该问题并不存在,并且SheetChange事件正确触发。

工作用例

  1. 从空白的工作簿开始
  2. 点击“设置图书句柄”,然后在消息框上单击“确定”
  3. 更改工作表中单元格的值
  4. 您应该看到A1单元格的事件已更新:1,计数器用于记录事件触发的次数
  5. 现在单击“显示STA表单”
  6. 测试A-将更新工作表上的5个单元格,因此计数器应增加5
  7. 文本B-将更新单个单元格,每次单击时计数器应增加1
  8. 关闭表格,更改工作表中的另一个单元格值,计数器应增加1
  9. 重复测试,但是单击“显示MT表单”
  10. 您应注意,每次更新单元格时,都会连续触发SheetChange事件。

用例失败

  1. 从空白的工作簿开始
  2. 点击“设置图书句柄”,然后在消息框上单击“确定”
  3. 更改工作表中单元格的值
  4. 您应该看到A1单元格的事件已更新:1,计数器用于记录事件触发的次数
  5. 现在单击“显示STA WPF窗口”
  6. 加载窗口时,ACTIVATED显示0 一种。注意:如果此时移动了窗口,则即使不单击任何按钮也不会触发该事件。 b。注意:如果用户单击窗口(例如,两个按钮之间的空白区域),测试也会失败
  7. 单击测试A-这将更新工作表上的5个单元格,因此计数器应增加5。这种情况。
  8. 单击测试B-这将更新单个单元格,每次单击时,计数器应增加1。这不会发生!注意状态现在显示为FOCUS 0
  9. 此后,无论发生什么情况,都不再触发SheetChange事件
  10. 可以使用“显示STA WPF对话框”和“显示MT WPF窗口”重复进行此测试,并获得相同的结果

有趣的发现
1.如果运行上述测试后,不再发生SheetChange事件,请再次单击“设置工作簿句柄”以重新注册SheetChange事件。以上测试现已通过,我无法使用WPF Windows重现原始问题。
2.“解决”按钮尝试“中断”事件,然后重新注册该事件,以解决该问题……不起作用

任何人都可以解释正在发生的事情或帮助解决该问题吗?

0 个答案:

没有答案