1 ) у меня написан некоторый ActiveX компонент
2 ) в нем вызываются эвенты на которые подписан javascript код
3 ) эвенты могут вызывать как с основного потока ActiveX ,так и с подчиненых потоков того же обьекта ActiveX
в IExplorer работает всё отлично,а написав простое приложение с контролом webbrowser у меня возникли проблемы что оно периодически крашится,
как мне кажется это происходит при работе с потоками,когда эвент генерирует не основной ,а подчиненые потоки.
как решить данную проблемму ?
Re: webbrowser проблемы с многопоточностью
От:
Аноним
Дата:
03.06.13 05:15
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Добрый день.
А>1 ) у меня написан некоторый ActiveX компонент А>2 ) в нем вызываются эвенты на которые подписан javascript код А>3 ) эвенты могут вызывать как с основного потока ActiveX ,так и с подчиненых потоков того же обьекта ActiveX
А>в IExplorer работает всё отлично,а написав простое приложение с контролом webbrowser у меня возникли проблемы что оно периодически крашится, А>как мне кажется это происходит при работе с потоками,когда эвент генерирует не основной ,а подчиненые потоки.
А>как решить данную проблемму ?
крашится с ошибкой accessviolationexception и пишет только в системный журнал,а от приложения не слова ,молча закрывается
Здравствуйте, Аноним, Вы писали:
А>в IExplorer работает всё отлично,а написав простое приложение с контролом webbrowser у меня возникли проблемы что оно периодически крашится, А>как мне кажется это происходит при работе с потоками,когда эвент генерирует не основной ,а подчиненые потоки.
В COM евенты это фактически интерфейсы которые должны корректно маршаллится через границы апартментов. Если ActiveX этого не делает, то рано или поздно начтет крешится и IE
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: webbrowser проблемы с многопоточностью
От:
Аноним
Дата:
04.06.13 05:25
Оценка:
Здравствуйте, TK, Вы писали:
TK>Здравствуйте, Аноним, Вы писали:
А>>в IExplorer работает всё отлично,а написав простое приложение с контролом webbrowser у меня возникли проблемы что оно периодически крашится, А>>как мне кажется это происходит при работе с потоками,когда эвент генерирует не основной ,а подчиненые потоки.
TK>В COM евенты это фактически интерфейсы которые должны корректно маршаллится через границы апартментов. Если ActiveX этого не делает, то рано или поздно начтет крешится и IE
судя по всему это проблема не в многопоточности ActiveX.
ошибка в логе системного журнала следующяя :
Application: WebBrowser.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.AccessViolationException
Stack:
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG ByRef)
at System.Windows.Forms.Application+ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr, Int32, Int32)
at System.Windows.Forms.Application+ThreadContext.RunMessageLoopInner(Int32, System.Windows.Forms.ApplicationContext)
at System.Windows.Forms.Application+ThreadContext.RunMessageLoop(Int32, System.Windows.Forms.ApplicationContext)
at System.Windows.Forms.Application.Run(System.Windows.Forms.Form)
at WebBrowser.Program.Main()
не совсем понятно куда копать...т.к вылетает(на одних и тех же действиях может вылететь ,а может нет) она крайне редко,но крашит приложение
А>Application: WebBrowser.exe
А>Framework Version: v4.0.30319
А>Description: The process was terminated due to an unhandled exception.
А>Exception Info: System.AccessViolationException
А>Stack:
А> at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG ByRef)
А> at System.Windows.Forms.Application+ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr, Int32, Int32)
А> at System.Windows.Forms.Application+ThreadContext.RunMessageLoopInner(Int32, System.Windows.Forms.ApplicationContext)
А> at System.Windows.Forms.Application+ThreadContext.RunMessageLoop(Int32, System.Windows.Forms.ApplicationContext)
А> at System.Windows.Forms.Application.Run(System.Windows.Forms.Form)
А> at WebBrowser.Program.Main()
А>
А>не совсем понятно куда копать...т.к вылетает(на одних и тех же действиях может вылететь ,а может нет) она крайне редко,но крашит приложение
Цепляетесь unmanaged отладчиком и смотрите в какой именно точке возникает этот access violation (какой callstack, какое именно сообщение обрабатывалось и т.п.), обработайте это исключение...
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: webbrowser проблемы с многопоточностью
От:
Аноним
Дата:
05.06.13 05:47
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Добрый день.
А>1 ) у меня написан некоторый ActiveX компонент А>2 ) в нем вызываются эвенты на которые подписан javascript код А>3 ) эвенты могут вызывать как с основного потока ActiveX ,так и с подчиненых потоков того же обьекта ActiveX
А>в IExplorer работает всё отлично,а написав простое приложение с контролом webbrowser у меня возникли проблемы что оно периодически крашится, А>как мне кажется это происходит при работе с потоками,когда эвент генерирует не основной ,а подчиненые потоки.
А>как решить данную проблемму ?
По факту обнаружил что при возникновении события на стороне ActiveX возникает ошибка,даже если это произошло в основном потоке ActiveX.
public class CMain : IActiveX, IDisposable
{
//....public void ISetProvider(string add, string code, int st)
{
if (ISet != null)
ISet(add, code, st);
}
//....
}
в index.html
document.myAx.attachEvent("ISet",MyISet);
function MyISet(code,add,param)
{
//..
$('#'+code).html(add);
}
просто создал приложение с Webbrowser которое загружает index.html ,он в свою очередь подключает ActiveX и подписывается на события.
В ActiveX в цикле 100 раз для примера сгенерировал событие.
for(int i =0;i<100;i++)
ISet("t", "test",11);
и приложение с контролом Webbrowser падает.
//--------------------------------------------------
а самое интересное что на компьютере с Win 7 данной проблемы не замечено работает как в обычном Iexplore.exe так и в моем приложении с контролом Webbrowser.
а на win xp работает только в Iexplore.exe , а на моем приложении всё падает,в чем дело не совсем понятно...отладка показывает что мое приложение падает в библиотеке jscript.dll на функции InvokeEx.
//---------------
проблема так и не решена...просто использую
Interop.SHDocVw COM объект ieframe.
в общем всё печально,не понятно такое поведение ( всё классно на win 7 ,но на winxp только ед. выход это Interop.SHDocVw COM)
А>просто создал приложение с Webbrowser которое загружает index.html ,он в свою очередь подключает ActiveX и подписывается на события. А>В ActiveX в цикле 100 раз для примера сгенерировал событие.
А>
А>for(int i =0;i<100;i++)
А>ISet("t", "test",11);
А>
Со строками у вас все в порядке, в BSTR их кто конвертирует?
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[3]: webbrowser проблемы с многопоточностью
От:
Аноним
Дата:
05.06.13 11:48
Оценка:
Здравствуйте, TK, Вы писали:
TK>Здравствуйте, Аноним, Вы писали:
А>>просто создал приложение с Webbrowser которое загружает index.html ,он в свою очередь подключает ActiveX и подписывается на события. А>>В ActiveX в цикле 100 раз для примера сгенерировал событие.
А>>
А>>for(int i =0;i<100;i++)
А>>ISet("t", "test",11);
А>>
TK>Со строками у вас все в порядке, в BSTR их кто конвертирует?
Об этом я не задумывался может действительно из-за этого...хотя всё равно не совсем ясно почему этот код отрабатывает отлично на win 7.
Спасибо за совет,я попробую конвертить