[Ironpython-users] ShowDialog Hangs
Andrew Ayre
andy at britishideas.com
Wed Feb 25 23:33:17 CET 2015
Thanks. I've added a call to Application.Run() and also this:
ExeThread.SetApartmentState(ApartmentState.STA);
Seems to be happy now!
Andy
On 2/25/2015 8:47 PM, Andrew Graham wrote:
> Not really strange, expected behaviour in fact. The Form is drawn OK but
> there is no message loop running on the thread to pump messages to it so
> it will be unresponsive and sit there until the thread exits. A modal
> dialog, or Form shown modally, tries to pump the message queue itself,
> that is how it acheives modality, and as my previous email to you
> stated, as there is no message loop on your thread for it to pump so
> that is probably why it hangs.
>
> Regards
>
> Andy graham
>
> -----Original Message----- From: Andrew Ayre
> Sent: Wednesday, February 25, 2015 4:41 PM
> To: ironpython-users at python.org
> Subject: Re: [Ironpython-users] ShowDialog Hangs
>
> Thanks for the responses. Strangely the following script works:
>
> import clr
> import time
> clr.AddReference("System.Windows.Forms")
> from System.Windows.Forms import OpenFileDialog, DialogResult, Form
> F = Form()
> F.Show()
> time.sleep(5)
>
> This displays a form and then closes it when the script ends after five
> seconds.
>
> However simply swapping F.Show for OpenFileDialog().ShowDialog() causes
> the script to hang.
>
> I will check the suggestions made, but I wondered if this behavior with
> the form gives anyone some additional clues.
>
> Thanks, Andy
>
> On 2/25/2015 2:50 PM, Slide wrote:
>> You need to make sure the thread was started as an STAThread I believe,
>> otherwise the common windows controls (OpenFileDialog being one of them)
>> won't work correctly.
>>
>> On Wed Feb 25 2015 at 2:02:32 AM Andrew Ayre <andy at britishideas.com
>> <mailto:andy at britishideas.com>> wrote:
>>
>> I am sure I am making a silly mistake somewhere.
>>
>> I have IronPython embedded in my C# WinForms application.
>>
>> The interpreter is running in a thread that has been created for it.
>> I.e. not the UI thread.
>>
>> Everything works fine until the call to Dialog.ShowDialog, at which
>> point execution of IronPython hangs and no dialog appears.
>>
>> I'm guessing that this is because the interpreter is not running
>> in the
>> UI thread (which I don't want to do because sometimes scripts can
>> take a
>> long time to execute, depending on what they are doing).
>>
>> This is my first attempt using WinForms from scripting in my
>> application.
>>
>> Any hints or suggestions on how I can debug this, synchronize with
>> the
>> UI thread or something else?
>>
>> Thanks! Andy
>>
>> import clr
>> clr.AddReference("System.__Windows.Forms")
>> from System.Windows.Forms import OpenFileDialog, DialogResult
>>
>> Dialog = OpenFileDialog()
>> Dialog.ShowDialog()
>>
>> --
>> Andy
>> PGP Key ID: 0xDC1B5864
>> _________________________________________________
>> Ironpython-users mailing list
>> Ironpython-users at python.org <mailto:Ironpython-users at python.org>
>> https://mail.python.org/__mailman/listinfo/ironpython-__users
>> <https://mail.python.org/mailman/listinfo/ironpython-users>
>>
>
--
Andy
PGP Key ID: 0xDC1B5864
More information about the Ironpython-users
mailing list