Метод Navigate (Navigate2) у WebBrowser, как известно, ассинхронный. Если в одном и том же приложении для второго созданного объекта WebBrowser вызвать Navigate до того, как закончится Navigate первого, вылетит exception с сообщением "can not invoke method Navigate at this time".
Ладно, не может так не может. Вызов Navigate переносим в новый поток. Создаем объект ядра auto reset event. В OnNavigate сбрасываем его в "свободно". Непосредственно перед Navigate — "занято", непосредственно перед "занято" ждем освобождения. Казалось бы, все должно работать, но не тут-то было — OnNavigate срабатывает, event переводится в "свободно", ожидающий поток перевод event в "занято", вызывает Navigate.. и снова вылетает вышеупомянутый эксепшин.
Господа, подскажите, пожалуйста, как его побороть?
kuj>Метод Navigate (Navigate2) у WebBrowser, как известно, ассинхронный. Если в одном и том же приложении для второго созданного объекта WebBrowser вызвать Navigate до того, как закончится Navigate первого, вылетит exception с сообщением "can not invoke method Navigate at this time". kuj>Ладно, не может так не может. Вызов Navigate переносим в новый поток. Создаем объект ядра auto reset event. В OnNavigate сбрасываем его в "свободно". Непосредственно перед Navigate — "занято", непосредственно перед "занято" ждем освобождения. Казалось бы, все должно работать, но не тут-то было — OnNavigate срабатывает, event переводится в "свободно", ожидающий поток перевод event в "занято", вызывает Navigate.. и снова вылетает вышеупомянутый эксепшин.
kuj>Господа, подскажите, пожалуйста, как его побороть?
Определяешь свой мессадж и шлешь его PostMessage (а в обработчике вызываешь Navigate).
Здравствуйте, kliff, Вы писали:
kuj>>Метод Navigate (Navigate2) у WebBrowser, как известно, ассинхронный. Если в одном и том же приложении для второго созданного объекта WebBrowser вызвать Navigate до того, как закончится Navigate первого, вылетит exception с сообщением "can not invoke method Navigate at this time". kuj>>Ладно, не может так не может. Вызов Navigate переносим в новый поток. Создаем объект ядра auto reset event. В OnNavigate сбрасываем его в "свободно". Непосредственно перед Navigate — "занято", непосредственно перед "занято" ждем освобождения. Казалось бы, все должно работать, но не тут-то было — OnNavigate срабатывает, event переводится в "свободно", ожидающий поток перевод event в "занято", вызывает Navigate.. и снова вылетает вышеупомянутый эксепшин.
kuj>>Господа, подскажите, пожалуйста, как его побороть?
K>Определяешь свой мессадж и шлешь его PostMessage (а в обработчике вызываешь Navigate).
Не совсем понимаю как это может помочь? Navigate ведь ассинхронный. Все, что мне нужно — это момент, когда Navigate уже можно вызывать. Казалось бы, OnNavigate должен сигнализировать именно об этом моменте, но он этого почему-то не делает...
Здравствуйте, kuj, Вы писали:
kuj>Не совсем понимаю как это может помочь? Navigate ведь ассинхронный. Все, что мне нужно — это момент, когда Navigate уже можно вызывать. Казалось бы, OnNavigate должен сигнализировать именно об этом моменте, но он этого почему-то не делает...
Поправка: речь о событии NavigateComplete2.
Здравствуйте, kuj, Вы писали:
kuj>Здравствуйте, kuj, Вы писали:
kuj>>Не совсем понимаю как это может помочь? Navigate ведь ассинхронный. Все, что мне нужно — это момент, когда Navigate уже можно вызывать. Казалось бы, OnNavigate должен сигнализировать именно об этом моменте, но он этого почему-то не делает... kuj>Поправка: речь о событии NavigateComplete2.
Попробуй DownloadComplete — "Fires when a navigation operation finishes, is halted, or fails".
Здравствуйте, algol, Вы писали:
kuj>>>Не совсем понимаю как это может помочь? Navigate ведь ассинхронный. Все, что мне нужно — это момент, когда Navigate уже можно вызывать. Казалось бы, OnNavigate должен сигнализировать именно об этом моменте, но он этого почему-то не делает... kuj>>Поправка: речь о событии NavigateComplete2.
A>Попробуй DownloadComplete — "Fires when a navigation operation finishes, is halted, or fails".
Пробовал. Все аналогично.
kuj>Метод Navigate (Navigate2) у WebBrowser, как известно, ассинхронный. Если в одном и том же приложении для второго созданного объекта WebBrowser вызвать Navigate до того, как закончится Navigate первого, вылетит exception с сообщением "can not invoke method Navigate at this time". kuj>Ладно, не может так не может. Вызов Navigate переносим в новый поток. Создаем объект ядра auto reset event. В OnNavigate сбрасываем его в "свободно". Непосредственно перед Navigate — "занято", непосредственно перед "занято" ждем освобождения. Казалось бы, все должно работать, но не тут-то было — OnNavigate срабатывает, event переводится в "свободно", ожидающий поток перевод event в "занято", вызывает Navigate.. и снова вылетает вышеупомянутый эксепшин.
kuj>Господа, подскажите, пожалуйста, как его побороть?
Что-то вообще фигня какая-то. Можно вызывать навигэйт сколько угодно раз у одного, двух... контролов. Ничего не надо дожидаться.
Скорей всего какая-то ошибка в создании компонента.
Здравствуйте, Nikto, Вы писали:
kuj>>Метод Navigate (Navigate2) у WebBrowser, как известно, ассинхронный. Если в одном и том же приложении для второго созданного объекта WebBrowser вызвать Navigate до того, как закончится Navigate первого, вылетит exception с сообщением "can not invoke method Navigate at this time". kuj>>Ладно, не может так не может. Вызов Navigate переносим в новый поток. Создаем объект ядра auto reset event. В OnNavigate сбрасываем его в "свободно". Непосредственно перед Navigate — "занято", непосредственно перед "занято" ждем освобождения. Казалось бы, все должно работать, но не тут-то было — OnNavigate срабатывает, event переводится в "свободно", ожидающий поток перевод event в "занято", вызывает Navigate.. и снова вылетает вышеупомянутый эксепшин.
kuj>>Господа, подскажите, пожалуйста, как его побороть?
N>Что-то вообще фигня какая-то. Можно вызывать навигэйт сколько угодно раз у одного, двух... контролов. Ничего не надо дожидаться. N>Скорей всего какая-то ошибка в создании компонента.
У одного ладно, понятно — предыдущий Navigate просто останавливается и запускается новый, скорее всего. А вот у двух и более Navigate одновременно работать отказывается. Ошибка в создании маловероятна. Клиент работает через Interop. Но тоже самое наблюдается с клиентом на MFC.
Здравствуйте, kuj, Вы писали:
N>>Что-то вообще фигня какая-то. Можно вызывать навигэйт сколько угодно раз у одного, двух... контролов. Ничего не надо дожидаться. N>>Скорей всего какая-то ошибка в создании компонента.
kuj>У одного ладно, понятно — предыдущий Navigate просто останавливается и запускается новый, скорее всего. А вот у двух и более Navigate одновременно работать отказывается. Ошибка в создании маловероятна. Клиент работает через Interop. Но тоже самое наблюдается с клиентом на MFC.
Гадом буду , но у меня на 4-х вызывается .Одновременно. Только что сваял пример. Могу по мылу заслать( если оставишь конечно ).