有没有办法从C#插件调用PowerPoint的DoEvents()函数?

时间:2019-05-21 10:54:37

标签: c# powerpoint

我试图在C#PPT插件上添加一个在后台运行的常量循环。因为我不希望它导致PowerPoint落后,所以我想复制VBA提供的DoEvents功能

我要尝试执行的操作与此类似:这里的想法是让代码在PowerPoint保持正常运行的同时每秒打印一条新行。

此代码起初可以正常运行,但是它不能解决我试图解决的问题,因为无论何时发送任何事件(例如MouseUp),即使没有任何方法侦听代码中的事件,它都会冻结PowerPoint。


int seconds = 0;
time = DateTime.Now.Second + 1;

while (true)
{

    if (DateTime.Now.Second >= time)
    {
        Debug.WriteLine(seconds + " seconds have passed since the addin started");
        time = DateTime.Now.Second + 1;
    }

    System.Windows.Forms.Application.DoEvents();
}

我直接在Powerpoint的VBA引擎中测试了该方法,它可以按预期工作(注意:1/86400相当于在Office女士的日期中增加一秒钟)


Sub countTime()

    nextTime = Now + (1 / 86400)
    counter = 0

    Do While True
        If Now >= nextTime Then
            counter = counter + 1
            Debug.Print (counter & " seconds have passed since the start")
            nextTime = Now + (1 / 86400)
        End If
        DoEvents
    Loop
End Sub


我无法从C#插件访问PowerPoint的DoEvents方法。有什么办法可以复制吗?

1 个答案:

答案 0 :(得分:0)

我最终通过简单地使用不同的线程来运行while循环来解决此问题,因为这不会干扰PowerPoint事件并按预期工作。

我相信DoEvents,因为它是从与PPT不同的库中调用的,所以内部会导致问题,这解释了为什么代码在PowerPoint发送任何事件(如MouseDown或MouseUp)之前一直有效。

感谢所有为此提供帮助的人!