【发布时间】:2021-08-03 02:37:33
【问题描述】:
我在 C#/.NET 程序中使用Microsoft.Office.Interop.PowerPoint 来自动执行对 PPTX 文件的某些操作。
我正在尝试使用以下代码在演示文稿中创建现有形状的副本:
var shape = slide.Shapes[1];
shape.Copy();
var newShape = targetSlide.Shapes.Paste();
然而,Paste() 指令是不可靠的,它有时有效但有时(显然是随机的)抛出以下异常:
错误:System.Runtime.InteropServices.COMException (0x80048240): 形状(未知成员):请求无效。剪贴板为空或 包含可能不会在此处粘贴的数据。在 Microsoft.Office.Interop.PowerPoint.Shapes.Paste()
折腾了一下,网上搜索,发现问题是.Copy()指令明显是异步的,基本上返回的时候并不能保证shape对象确实已经复制到剪贴板了。
事实上,添加一个:
Thread.Sleep(1000);
在Copy() 和Paste() 之间的指令解决了这个问题。
但是,睡眠不是一个合适的解决方案,它会大大减慢程序的速度,并且无法知道您将睡眠时间设置得过高还是过低。
我的问题是:有没有更可靠的方法可以在粘贴之前等待副本“准备好”?
【问题讨论】:
标签: c# powerpoint office-interop .net-4.6.1 powerpoint-interop