wow, python.net, pythoncom and py2exe. Just need to find a way to import IronPython and use something from that too... ;)
-Brian On 1/3/08 10:55 AM, "Maksim Kozyarchuk" <[EMAIL PROTECTED]> wrote: > We found that the following code as the first line of your python file puts > you into the STA. > > import pythoncom > pythoncom.CoInitialize() > > Maksim > > On 1/3/08 9:44 AM, "Brian Lloyd" <[EMAIL PROTECTED]> wrote: > >> Hi Sebastian - when you talk about it 'running perfectly with >> the normal python.exe', I assume you mean the one that comes >> with python.net. >> >> That exe is actually written in C# and explicitly sets the >> apartment mode to STA. >> >> I suspect the problem is that py2exe will create its own form >> of exe which won't do that, so you'll get the default threading >> model (MTA). >> >> It might be possible for your script to set the main thread to >> STA, if it is the very first thing your program does. You may >> want to refer to the docs on that -- I remember it was kind of >> complicated and hard to get it set from python code, but don't >> recall all of the details. >> >> -Brian >> >> >> On 1/3/08 5:46 AM, "Sebastian Stang" <[EMAIL PROTECTED]> wrote: >> >>> > Dear pythoneers, >>> > i want to deliver my program, which runs perfectly 'uncompiled', as an >>> > exe file to customers. >>> > >>> > The problem: i have to use an activeX component in a windows-form, and >>> > com-components can only be created in single-thread apartments. >>> > But when i use py2exe to compile it, the application is run in a multi- >>> > threaded-apartment >>> > (System.Threading.Thread.CurrentThread.GetApartmentState() is MTA). >>> > >>> > I tried some workarounds, e.g. create the form in an STA-thread or >>> > create the activex in an STA like this: >>> > >>> > thread_is_ready = False >>> > axBrowser = None >>> > def create_browser_thread(*args): >>> > global thread_is_ready >>> > global axBrowser >>> > print System.Threading.Thread.CurrentThread.GetApartmentState() >>> > axBrowser = AxSHDocVw.AxWebBrowser() >>> > thread_is_ready = True >>> > >>> > #and the initialization function in my main form class: >>> > def InitializeComponent(self): >>> > global thread_is_ready >>> > global axBrowser >>> > job = System.Threading.ThreadStart(create_browser_thread) >>> > thread = System.Threading.Thread(job) >>> > thread.SetApartmentState(System.Threading.ApartmentState.STA) >>> > thread.Start() >>> > while not thread_is_ready: >>> > pass >>> > self.Controls.Add(axBrowser) >>> > >>> > This all worked fine when run with python.exe from command-line. >>> > However, compiled with py2exe, the initialization function ends >>> > without exceptions, but the form is not shown and the program hangs. >>> > Telling the form to shop does not help either. >>> > >>> > Did anyone experience similar problems? >>> > >>> > best regards, >>> > Pablo >>> > _________________________________________________ >>> > Python.NET mailing list - PythonDotNet@python.org >>> > http://mail.python.org/mailman/listinfo/pythondotnet >> >> -------------------------- >> Brian Lloyd >> >> [EMAIL PROTECTED] >> >> _________________________________________________ >> Python.NET mailing list - PythonDotNet@python.org >> http://mail.python.org/mailman/listinfo/pythondotnet >> > > -------------------------- Brian Lloyd [EMAIL PROTECTED]
_________________________________________________ Python.NET mailing list - PythonDotNet@python.org http://mail.python.org/mailman/listinfo/pythondotnet