private void InsertItem(IFileItem item) { if (item == null) { return; } PPT.Application app = new PPT.Application(); PPT.Presentations pres = app.Presentations; PPT.Presentation pptx = pres.Open(item.File.FullPath, MsoTriState.msoFalse, MsoTriState.msoFalse, MsoTriState.msoFalse); PPT.Slides slides = pptx.Slides; PPT.Slide slide = slides[item.Index]; if (item.Type == ItemType.Slide) { slide.Copy(); } else { PPT.Shapes shapes = slide.Shapes; PPT.Shape shape = shapes[1]; shape.Copy(); shapes.ReleaseCOM(); shapes = null; shape.ReleaseCOM(); shape = null; } PPT.Presentation dstpptx = app.ActivePresentation; PPT.DocumentWindow wnd = app.ActiveWindow; PPT.View view = wnd.View; //TODO: Check if there is no selection (selection between slides) PPT.Slides dstSlides = dstpptx.Slides; PPT.Slide dstSlide = null; dstSlide = view.Slide as PPT.Slide; int ix = dstSlide.SlideIndex + 1; if (item.Type == ItemType.Slide) { dstSlide.Copy(); var r = dstSlides.Paste(); //TODO: dstSlides.Paste(ix) Hangs here var s = r[1]; s.MoveTo(ix); s.ReleaseCOM(); s = null; r.ReleaseCOM(); r = null; } else { view.Paste(); } dstSlide.ReleaseCOM(); dstSlide = null; wnd.ReleaseCOM(); wnd = null; view.ReleaseCOM(); view = null; dstpptx.ReleaseCOM(); dstpptx = null; slide.ReleaseCOM(); slide = null; slides.ReleaseCOM(); slides = null; pptx.Close(); pptx.ReleaseCOM(); pptx = null; pres.ReleaseCOM(); pres = null; app.ReleaseCOM(); app = null; dstSlides.ReleaseCOM(); dstSlides = null; }