Как проверить, полностью ли загружено приложение Excel - PullRequest
0 голосов
/ 29 ноября 2018

Я использую текущий код для проверки запуска Excel.Когда он запустится, я хочу получить приложение с помощью Marshal.getActiveObject ().

    private ManagementEventWatcher WatchForProcessStart(string processName)
    {
        string queryString =
            "SELECT TargetInstance" +
            "  FROM __InstanceCreationEvent " +
            "WITHIN  10 " +
            " WHERE TargetInstance ISA 'Win32_Process' " +
            "   AND TargetInstance.Name = '" + processName + "'";


        // The dot in the scope means use the current machine
        string scope = @"\\.\root\CIMV2";

        // Create a watcher and listen for events
        ManagementEventWatcher watcher = new ManagementEventWatcher(scope, queryString);
        watcher.EventArrived += ProcessStarted;
        watcher.Start();

        return watcher;
    }

    private void ProcessStarted(object sender, EventArrivedEventArgs e)
    {

        var excelApp = (Excel.Application)Marshal.GetActiveObject("Excel.Application");
        if (excelApp != null)
        {
                // do stuff

        }
    }

Однако прямо сейчас Marshal.getActiveObject () запускается сразу после запуска Excel, что означает, что приложение не полностью инициализировано, но приводит к исключению "System.Runtime.InteropServices.COMException' in mscorlib.dll".

Чтобы решить эту проблему, я перевел программу на 10 секунд (достаточно долго, чтобы приложение Excel полностью загружалось на моем компьютере) с System.Threading.Thread.Sleep(25000);, и это работает, но я хочу найти другой способ сделать это, потому что 10-второй сон зависит от аппаратного обеспечения.

Самый простой способ, который я нашел, это проверить, загружено ли приложение процесса полностью, что я намеревался сделать с Status Win32_Process , ноон еще не реализован.

Спасибо за потраченное время.

...