Hi, i have a multithreaded application which uses forms and i have a worker
thread that has to create a modeless dialog to monitor some of the operation
which it has to do. The problem is that if you create the dialog and call
show() from the thread this dialog wont't have a message queue and will
become unresponsive. I found in a page that you have to create the dialog in
the main UI thread.In that case the message queue of the main form will be
shared among the main form of my application and the modeless dialog i have
created, but there is a problem. If one of them hangs up the other too will
hang. The problem is that my application hangs at one point and i dont know
exactly the reason , the only thing i know is that it has to be something
like a deadlock that causes one of the forms become unresponsive.
I want the modeless dialog to have its own message queue independent from
the main UI message queue, ¿how i can do that? i have tried to create a new
thread which executes application.run again as i have read that this method
creates a message queue for the thread who calls it but the result was not
the expected one: my modeless dialog runs ,be sure of it but when i call
application exit in the thread of the modeless dialog all the application
exit, not only the thread which i was pretending to be th ethread of teh
dialog, follow me?
Any ideas about this?

Re: Message queue in modeless dialogs by Jeff

Jeff
Sat Apr 08 07:31:20 CDT 2006

Why not create the modeless dialog in your main thread, but then kick off a
worker thread to actually do the work you're doing?
What do you mean by "if one of them hangs up" -- why would they do that? The
forms themselves won't hang up -- though perhaps what's happening in the
worker thread could stop...

jp

"eduwushu" <eduwushu@discussions.microsoft.com> wrote in message
news:1DDD910B-AB79-4961-95AD-329BCEB1ADC0@microsoft.com...
> Hi, i have a multithreaded application which uses forms and i have a
> worker
> thread that has to create a modeless dialog to monitor some of the
> operation
> which it has to do. The problem is that if you create the dialog and call
> show() from the thread this dialog wont't have a message queue and will
> become unresponsive. I found in a page that you have to create the dialog
> in
> the main UI thread.In that case the message queue of the main form will be
> shared among the main form of my application and the modeless dialog i
> have
> created, but there is a problem. If one of them hangs up the other too
> will
> hang. The problem is that my application hangs at one point and i dont
> know
> exactly the reason , the only thing i know is that it has to be something
> like a deadlock that causes one of the forms become unresponsive.
> I want the modeless dialog to have its own message queue independent from
> the main UI message queue, ¿how i can do that? i have tried to create a
> new
> thread which executes application.run again as i have read that this
> method
> creates a message queue for the thread who calls it but the result was not
> the expected one: my modeless dialog runs ,be sure of it but when i call
> application exit in the thread of the modeless dialog all the application
> exit, not only the thread which i was pretending to be th ethread of teh
> dialog, follow me?
> Any ideas about this?



Re: Message queue in modeless dialogs by eduwushu

eduwushu
Sat Apr 08 07:45:01 CDT 2006

I do that instead.
I have a worker thread that is doing some operations and the user can ask it
to show a monitor to show the progress of its work.The worker thread do an
invoking on the main UI thread to create the modeless dialog so it shares the
message queue of the main form of the application. So the dialog is created
in the main thread really. The worker thread updates the contents of the
dialog periodically doing invoking operations on it. The problem is that when
i execute my program it hangs when the modeless dialog has to be repainted
(when i for example occlude part of its client area and later discver it
again) and i dont know why. It looks like some kind of deadlock but im not
sure.Makes all of this sense to you? have you been in a similar situation?

"Jeff Pek (Autodesk)" wrote:

> Why not create the modeless dialog in your main thread, but then kick off a
> worker thread to actually do the work you're doing?
> What do you mean by "if one of them hangs up" -- why would they do that? The
> forms themselves won't hang up -- though perhaps what's happening in the
> worker thread could stop...
>
> jp
>
> "eduwushu" <eduwushu@discussions.microsoft.com> wrote in message
> news:1DDD910B-AB79-4961-95AD-329BCEB1ADC0@microsoft.com...
> > Hi, i have a multithreaded application which uses forms and i have a
> > worker
> > thread that has to create a modeless dialog to monitor some of the
> > operation
> > which it has to do. The problem is that if you create the dialog and call
> > show() from the thread this dialog wont't have a message queue and will
> > become unresponsive. I found in a page that you have to create the dialog
> > in
> > the main UI thread.In that case the message queue of the main form will be
> > shared among the main form of my application and the modeless dialog i
> > have
> > created, but there is a problem. If one of them hangs up the other too
> > will
> > hang. The problem is that my application hangs at one point and i dont
> > know
> > exactly the reason , the only thing i know is that it has to be something
> > like a deadlock that causes one of the forms become unresponsive.
> > I want the modeless dialog to have its own message queue independent from
> > the main UI message queue, ¿how i can do that? i have tried to create a
> > new
> > thread which executes application.run again as i have read that this
> > method
> > creates a message queue for the thread who calls it but the result was not
> > the expected one: my modeless dialog runs ,be sure of it but when i call
> > application exit in the thread of the modeless dialog all the application
> > exit, not only the thread which i was pretending to be th ethread of teh
> > dialog, follow me?
> > Any ideas about this?
>
>
>

Re: Message queue in modeless dialogs by Jeff

Jeff
Sat Apr 08 09:16:20 CDT 2006

No, I haven't seen that. You could also try a BeginInvoke to update the main
UI; this wouldn't block the invoker.
- Jeff

"eduwushu" <eduwushu@discussions.microsoft.com> wrote in message
news:0293E295-4FB4-46E9-8573-B19613BD58EE@microsoft.com...
>I do that instead.
> I have a worker thread that is doing some operations and the user can ask
> it
> to show a monitor to show the progress of its work.The worker thread do an
> invoking on the main UI thread to create the modeless dialog so it shares
> the
> message queue of the main form of the application. So the dialog is
> created
> in the main thread really. The worker thread updates the contents of the
> dialog periodically doing invoking operations on it. The problem is that
> when
> i execute my program it hangs when the modeless dialog has to be repainted
> (when i for example occlude part of its client area and later discver it
> again) and i dont know why. It looks like some kind of deadlock but im not
> sure.Makes all of this sense to you? have you been in a similar situation?
>
> "Jeff Pek (Autodesk)" wrote:
>
>> Why not create the modeless dialog in your main thread, but then kick off
>> a
>> worker thread to actually do the work you're doing?
>> What do you mean by "if one of them hangs up" -- why would they do that?
>> The
>> forms themselves won't hang up -- though perhaps what's happening in the
>> worker thread could stop...
>>
>> jp
>>
>> "eduwushu" <eduwushu@discussions.microsoft.com> wrote in message
>> news:1DDD910B-AB79-4961-95AD-329BCEB1ADC0@microsoft.com...
>> > Hi, i have a multithreaded application which uses forms and i have a
>> > worker
>> > thread that has to create a modeless dialog to monitor some of the
>> > operation
>> > which it has to do. The problem is that if you create the dialog and
>> > call
>> > show() from the thread this dialog wont't have a message queue and will
>> > become unresponsive. I found in a page that you have to create the
>> > dialog
>> > in
>> > the main UI thread.In that case the message queue of the main form will
>> > be
>> > shared among the main form of my application and the modeless dialog i
>> > have
>> > created, but there is a problem. If one of them hangs up the other too
>> > will
>> > hang. The problem is that my application hangs at one point and i dont
>> > know
>> > exactly the reason , the only thing i know is that it has to be
>> > something
>> > like a deadlock that causes one of the forms become unresponsive.
>> > I want the modeless dialog to have its own message queue independent
>> > from
>> > the main UI message queue, ¿how i can do that? i have tried to create a
>> > new
>> > thread which executes application.run again as i have read that this
>> > method
>> > creates a message queue for the thread who calls it but the result was
>> > not
>> > the expected one: my modeless dialog runs ,be sure of it but when i
>> > call
>> > application exit in the thread of the modeless dialog all the
>> > application
>> > exit, not only the thread which i was pretending to be th ethread of
>> > teh
>> > dialog, follow me?
>> > Any ideas about this?
>>
>>
>>



Re: Message queue in modeless dialogs by eduwushu

eduwushu
Sat Apr 08 10:25:01 CDT 2006

BeginInvoke dont resolve the problem so then it has not to be with the
blocking behaviour of the Invoke method. The fact is that my modeless dialog
only blocks when i moves it, sometimes later and sometimes sooner. If i leave
the dialog quiet the application dont hangs.MMMM strange

"Jeff Pek (Autodesk)" wrote:

> No, I haven't seen that. You could also try a BeginInvoke to update the main
> UI; this wouldn't block the invoker.
> - Jeff
>
> "eduwushu" <eduwushu@discussions.microsoft.com> wrote in message
> news:0293E295-4FB4-46E9-8573-B19613BD58EE@microsoft.com...
> >I do that instead.
> > I have a worker thread that is doing some operations and the user can ask
> > it
> > to show a monitor to show the progress of its work.The worker thread do an
> > invoking on the main UI thread to create the modeless dialog so it shares
> > the
> > message queue of the main form of the application. So the dialog is
> > created
> > in the main thread really. The worker thread updates the contents of the
> > dialog periodically doing invoking operations on it. The problem is that
> > when
> > i execute my program it hangs when the modeless dialog has to be repainted
> > (when i for example occlude part of its client area and later discver it
> > again) and i dont know why. It looks like some kind of deadlock but im not
> > sure.Makes all of this sense to you? have you been in a similar situation?
> >
> > "Jeff Pek (Autodesk)" wrote:
> >
> >> Why not create the modeless dialog in your main thread, but then kick off
> >> a
> >> worker thread to actually do the work you're doing?
> >> What do you mean by "if one of them hangs up" -- why would they do that?
> >> The
> >> forms themselves won't hang up -- though perhaps what's happening in the
> >> worker thread could stop...
> >>
> >> jp
> >>
> >> "eduwushu" <eduwushu@discussions.microsoft.com> wrote in message
> >> news:1DDD910B-AB79-4961-95AD-329BCEB1ADC0@microsoft.com...
> >> > Hi, i have a multithreaded application which uses forms and i have a
> >> > worker
> >> > thread that has to create a modeless dialog to monitor some of the
> >> > operation
> >> > which it has to do. The problem is that if you create the dialog and
> >> > call
> >> > show() from the thread this dialog wont't have a message queue and will
> >> > become unresponsive. I found in a page that you have to create the
> >> > dialog
> >> > in
> >> > the main UI thread.In that case the message queue of the main form will
> >> > be
> >> > shared among the main form of my application and the modeless dialog i
> >> > have
> >> > created, but there is a problem. If one of them hangs up the other too
> >> > will
> >> > hang. The problem is that my application hangs at one point and i dont
> >> > know
> >> > exactly the reason , the only thing i know is that it has to be
> >> > something
> >> > like a deadlock that causes one of the forms become unresponsive.
> >> > I want the modeless dialog to have its own message queue independent
> >> > from
> >> > the main UI message queue, ¿how i can do that? i have tried to create a
> >> > new
> >> > thread which executes application.run again as i have read that this
> >> > method
> >> > creates a message queue for the thread who calls it but the result was
> >> > not
> >> > the expected one: my modeless dialog runs ,be sure of it but when i
> >> > call
> >> > application exit in the thread of the modeless dialog all the
> >> > application
> >> > exit, not only the thread which i was pretending to be th ethread of
> >> > teh
> >> > dialog, follow me?
> >> > Any ideas about this?
> >>
> >>
> >>
>
>
>