C# 运行宏打开其他程序文件窗口 如何在文件保存时触发if判断
问题核心说明
当前代码存在两个核心问题:
Operation.RunMacro调用后没有等待用户完成保存操作就直接执行分支判断,逻辑时序错误- 分支判断的条件写法错误,没有获取方法执行结果直接用方法名做判断,语法不成立
解决办法
方案1:使用同步阻塞调用(优先)
如果Operation.RunMacro本身支持同步执行,会阻塞当前线程直到用户完成保存、关闭导出窗口,直接修改代码获取方法返回值即可:
private void pdfButton_Click(object sender, EventArgs e) { // 同步调用RunMacro,方法会阻塞直到用户完成保存操作/关闭导出窗口 bool exportResult = Operation.RunMacro("ExportPDF.cs"); // 若RunMacro返回值不是布尔类型,根据实际返回的成功/失败标识调整判断条件即可 if (exportResult) { MessageBox.Show("PDF files exported!"); pdfLabel.Text = pdfLabel.Text + " - DONE!"; pdfLabel.ForeColor = System.Drawing.Color.Green; } else { pdfLabel.Text = pdfLabel.Text + " WRONG!"; pdfLabel.ForeColor = System.Drawing.Color.Red; } }
方案2:订阅宏执行完成事件
如果Operation.RunMacro是异步执行,类库提供了执行完成的回调事件,就通过订阅事件处理后续逻辑:
private void pdfButton_Click(object sender, EventArgs e) { // 先订阅宏执行完成事件 Operation.MacroCompleted += OnPdfExportCompleted; Operation.RunMacro("ExportPDF.cs"); } private void OnPdfExportCompleted(object sender, MacroCompletedEventArgs e) { // 取消订阅避免重复触发 Operation.MacroCompleted -= OnPdfExportCompleted; if (e.IsSuccess) { MessageBox.Show("PDF files exported!"); pdfLabel.Text = pdfLabel.Text + " - DONE!"; pdfLabel.ForeColor = System.Drawing.Color.Green; } else { pdfLabel.Text = pdfLabel.Text + " WRONG!"; pdfLabel.ForeColor = System.Drawing.Color.Red; } }
方案3:无内置回调时的兼容方案
如果没有提供完成事件,可以根据场景选择以下实现:
- 文件监听:使用
FileSystemWatcher监听PDF导出的目标目录,识别到对应PDF文件生成后执行后续逻辑,使用完及时释放监听对象避免资源泄漏 - 进程/窗口监听:识别导出窗口对应的进程或窗口句柄,轮询判断窗口是否关闭,确认用户完成操作后再执行后续逻辑,该方案兼容性较差,仅做备选
内容的提问来源于stack exchange,提问作者jacko10101
相关产品推荐
相关产品推荐

