1. C# / Говнокод #4699

    +118

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    if(wordApp != null)
                    {
                        try
                        {
                            if(isNewApp && wordApp.Documents.Count == 0)
                            {
                                object arg1 = Word.WdSaveOptions.
                                                wdDoNotSaveChanges;
                                object arg2 = null;
                                object arg3 = null;
                                wordApp.Quit(ref arg1, ref arg2, ref arg3);
    
                                // Wait until Word shuts down.
    
                                for(;;)
                                {
                                    Thread.Sleep(100);
                                    try
                                    {
                                        // When word shuts down this call 
    
                                        // throws an exception.
    
                                        string dummy = wordApp.Version;
                                    }
                                    catch
                                    {
                                        break;
                                    }
                                }
                            }
                        }
                        catch {}
    
                        wordApp = null;
                    }

    Вот такой вот Dispose для ворда
    http://www.codeproject.com/KB/cs/winwordloader.aspx

    Запостил: Lennis, 21 Ноября 2010

    Комментарии (10) RSS

    • Word либо отвечает, либо умер.
      Сурово. Оригинально.
      Ответить
    • Разве оптимизатор в релиз-версии не вырежет в блоке for(;;) {} всё, кроме Thread.Sleep(100);? Или в дотнете оптимизатор этим не занимается?
      Ответить
    • > string dummy = wordApp.Version;
      "ой, ты еще здесь?"
      Ответить
    • ну а че, вдолбасили такой нормальный крепкий костыль, че ж делать, если Ворд по хорошему не понимает; правда можно было бы с вордом работать в отдельном домене приложения, но это ж лень возиться
      Ответить
      • сколько писал для VSTO, что ворд, что эксел, понимали "умри" с первого раза
        Ответить
        • да мало ли, наверно какие-то проблемы у автора все-таки были...
          может быть со много-мегабайтными файлами ворд долго скрипит пока освобождает все ресурсы
          Ответить

    Добавить комментарий