我试图在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方法。有什么办法可以复制吗?
答案 0 :(得分:0)
我最终通过简单地使用不同的线程来运行while循环来解决此问题,因为这不会干扰PowerPoint事件并按预期工作。
我相信DoEvents,因为它是从与PPT不同的库中调用的,所以内部会导致问题,这解释了为什么代码在PowerPoint发送任何事件(如MouseDown或MouseUp)之前一直有效。
感谢所有为此提供帮助的人!