Есть ли способ вызвать функцию DoEvents () PowerPoint из надстройки C #? - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь добавить постоянный цикл, работающий в фоновом режиме надстройки C # PPT. Поскольку я не хочу, чтобы PowerPoint зависал, я бы хотел воспроизвести функциональность DoEvents, которую обеспечивает VBA

То, что я пытаюсь сделать, выглядит примерно так: идея состоит в том, чтобы код печатал новую строку каждую секунду, пока PowerPoint продолжает нормально функционировать.

Сначала этот код работает правильно, однако он не решает проблему, которую я пытался решить, поскольку он останавливает PowerPoint при отправке любого события (например, MouseUp) даже без какого-либо метода, прослушивающего событие в коде.


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();
}

Я протестировал подход непосредственно внутри движка VBA PowerPoint, и он работает как задумано (Примечание: 1/86400 эквивалентно добавлению секунды к датам Ms 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


Я не могу получить доступ к методу DoEvents в PowerPoint из надстройки C #. Есть ли способ повторить это?

1 Ответ

1 голос
/ 23 мая 2019

Я решил эту проблему, просто используя другой поток для запуска цикла while, поскольку это не мешает событиям PowerPoint и работает по назначению.

Я полагаю, что DoEvents, поскольку его вызов из другой библиотеки, отличной от используемой PPT, приводит к возникновению проблем, что объясняет, почему код работал до тех пор, пока PowerPoint не отправлял какое-либо событие (такое как MouseDown или MouseUp).

Спасибо всем, кто помог мне в этом!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...