Конференция ".Net" » Взаимодействие потоков [C#, WinXP]
 
  • Thread (26.08.07 22:40) [0]
    Каким еще образом можно из вторичного потока инициировать вызов метода в контексте главного потока кроме как Control.Invoke?

    Дело в том, что основной поток - это плугин к офисному приложению и в моем распоряжении нет ни одного экземпляра Control.
  • Evgeny V © (27.08.07 14:10) [1]
    Варианты
    - свой контрол у плагина, например невидимый
    - Application.AddMessageFilter
    - WndProc и SendMessage (или PostMessage)
  • Thread (27.08.07 15:43) [2]
    Невидимый свой контрол не прокатывает, уже пробовал.  Выскакивает исключение что-то типа "невозможно вызвать то-то, пока окно не то-то и не то-то". В общем так обмануть у меня не получилось.
    С сообщениями на мой взгляд самый легкий и логичный способ, но блин как же:
    1. отправить сообщение
    2. принять его.

    Нужно ведь иметь окно и свою оконную процедуру. В вин32 это без проблем, а вот как в дотнете?
  • Evgeny V © (27.08.07 16:03) [3]
    Так же как и в Win32, найди окно приложения( получи HWND) и вперед - для этого делать вызовы нативных функций системы из соотвествующих длл (ключевое слово Interop).  А вот с невидимым контролом - интересно, что именно ты делал и что он тебе не дал сделать, какие сообщения об ошибке?
  • Thread (27.08.07 16:15) [4]
    Если инвоук вызывать у "фиктивного" невидимого контрола, то вылетает исключение

    Additional info:
    "Невозможно вызвать Invoke или BeginInvoke для элемента управления до завершения создания дескриптора окна."

    То же самое происходит, если я переношу этот код в модуль своей формы и использую саму форму для вызова invoke. Форма показывается модально, но после закрытия не уничтожается, а просто становится невилимой.
  • Evgeny V © (28.08.07 07:56) [5]
    Делай через Invoke, проще будет. Просто дескриптор может быть не создан до обращения к нему.  Сделай в конструкторе своего невидимого окна такую строку

    IntPtr hwnd=this.Handle;



    Тогда после вызова конструктора у тебя уже будет готовый дескриптор.
  • Thread (28.08.07 17:55) [6]
    Спасибо, это как раз то, что надо!

    http://flash.kards.ru/list/show/3000/103/3/thank_you_very_much.htm
 
Конференция ".Net" » Взаимодействие потоков [C#, WinXP]
Есть новые Нет новых   [134427   +34][b:0][p:0]