Oh, the problem is that pyc.py doesn't mark the thread as STA.  You can add 
this line to pyc.py right after mainMethod = ...

mainMethod.SetCustomAttribute(clr.GetClrType(System.STAThreadAttribute).GetConstructor(()),
 System.Array[System.Byte](()))

and it should work.  We should do that by default for winexe's and probably 
offer an option to control STA/MTA for non-WinEXEs.

Thanks for reporting this.  I've opened a bug 
(http://www.codeplex.com/IronPython/WorkItem/View.aspx?WorkItemId=19409) and we 
can probably refresh the sample.

From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Davy Mitchell
Sent: Saturday, November 08, 2008 1:59 PM
To: Discussion of IronPython
Subject: Re: [IronPython] ActiveX STA Issue in compiled Winforms EXE

Thanks Dino - here's the info:

Unhandled Exception: System.Threading.ThreadStateException: ActiveX control 
'8856f961-340a-11d0-a96b-00c04fd705a2' cannot be instantiated because the 
current thread is not in a single-threaded apartment.
   at System.Windows.Forms.WebBrowserBase..ctor(String clsidString)
   at System.Windows.Forms.WebBrowser..ctor()
   at _stub_$24##21(Closure , CallSite , CodeContext , Object )
   at Microsoft.Scripting.Actions.MatchCaller.Call2[T0,T1,TRet](Func`4 target, 
CallSite site, Object[] args)
   at Microsoft.Scripting.Actions.CallSite`1.UpdateAndExecute(Object[] args)
   at 
Microsoft.Scripting.Actions.UpdateDelegates.Update2[T,T0,T1,TRet](CallSite 
site, T0 arg0, T1 arg1)
   at S$1.__init__$7(Closure , Object self)
   at _stub_$18##15(Closure , CallSite , CodeContext , Object , Object )
   at Microsoft.Scripting.Actions.MatchCaller.Call3[T0,T1,T2,TRet](Func`5 
target, CallSite site, Object[] args)
   at Microsoft.Scripting.Actions.CallSite`1.UpdateAndExecute(Object[] args)
   at 
Microsoft.Scripting.Actions.UpdateDelegates.Update3[T,T0,T1,T2,TRet](CallSite 
site, T0 arg0, T1 arg1, T2 arg2)
   at _stub_$17##14(Closure , CallSite , CodeContext , Object )
   at Microsoft.Scripting.Actions.MatchCaller.Call2[T0,T1,TRet](Func`4 target, 
CallSite site, Object[] args)
   at Microsoft.Scripting.Actions.CallSite`1.UpdateAndExecute(Object[] args)
   at 
Microsoft.Scripting.Actions.UpdateDelegates.Update2[T,T0,T1,TRet](CallSite 
site, T0 arg0, T1 arg1)
   at _stub_$16##13(Closure , CallSite , CodeContext , Object )
   at Microsoft.Scripting.Actions.MatchCaller.Call2[T0,T1,TRet](Func`4 target, 
CallSite site, Object[] args)
   at Microsoft.Scripting.Actions.CallSite`1.UpdateAndExecute(Object[] args)
   at 
Microsoft.Scripting.Actions.UpdateDelegates.Update2[T,T0,T1,TRet](CallSite 
site, T0 arg0, T1 arg1)
   at S$1.Initialize(Scope $scope, LanguageContext $language)
   at 
Microsoft.Scripting.Runtime.OptimizedScriptCode.InvokeTarget(LambdaExpression 
code, Scope scope)
   at Microsoft.Scripting.ScriptCode.Run(Scope scope)
   at IronPython.Runtime.PythonContext.CreateModule(String fileName, Scope 
scope, ScriptCode scriptCode, ModuleOptions options)
   at IronPython.Runtime.PythonContext.CompileModule(String fileName, String 
moduleName, SourceUnit sourceCode, ModuleOptions options, ScriptCode& 
scriptCode)
   at IronPython.Runtime.PythonContext.CompileModule(String fileName, String 
moduleName, SourceUnit sourceCode, ModuleOptions options)
   at IronPython.Runtime.Importer.LoadFromSourceUnit(CodeContext context, 
SourceUnit sourceCode, String name, String path)
   at IronPython.Runtime.Importer.LoadModuleFromSource(CodeContext context, 
String name, String path)
   at IronPython.Runtime.Importer.LoadFromDisk(CodeContext context, String 
name, String fullName, String str)
   at IronPython.Runtime.Importer.ImportFromPathHook(CodeContext context, 
String name, String fullName, List path, Func`5 defaultLoader)
   at IronPython.Runtime.Importer.ImportFromPath(CodeContext context, String 
name, String fullName, List path)
   at IronPython.Runtime.Importer.ImportTopAbsolute(CodeContext context, String 
name)
   at IronPython.Runtime.Importer.ImportModule(CodeContext context, Object 
globals, String modName, Boolean bottom, Int32 level)
   at IronPython.Runtime.Builtin.__import__(CodeContext context, String name, 
Object globals, Object locals, Object fromlist, Int32 level)
   at _stub_$1##1(Closure , CallSite , CodeContext , Object , String , 
IAttributesCollection , IAttributesCollection , PythonTuple , Int32 )
   at 
Microsoft.Scripting.Actions.MatchCaller.Call7[T0,T1,T2,T3,T4,T5,T6,TRet](Func`9 
target, CallSite site, Object[] args)
   at Microsoft.Scripting.Actions.CallSite`1.UpdateAndExecute(Object[] args)
   at 
Microsoft.Scripting.Actions.UpdateDelegates.Update7[T,T0,T1,T2,T3,T4,T5,T6,TRet](CallSite
 site, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6
rg6)
   at IronPython.Runtime.Importer.Import(CodeContext context, String fullName, 
PythonTuple from, Int32 level)
   at IronPython.Runtime.Operations.PythonOps.InitializeModule(Assembly 
precompiled, String main, String[] references)
   at PythonMain.Main()

Repro code is:

import clr
clr.AddReference('System.Windows.Forms')
from System.Windows.Forms import *

class MainForm(Form):
    def __init__(self):
        self.Dock = DockStyle.Fill
        self.Controls.Add(WebBrowser())
form = MainForm()
Application.Run(form)

Compiled with:
ipy pyc.py /out:wf /target:winexe /main:repro.py

-X:ExceptionDetail didn't alter the output from the exe. Run from ipy there was 
no issue.

Cheers,
Davy
On Sat, Nov 8, 2008 at 5:39 PM, Dino Viehland <[EMAIL PROTECTED]<mailto:[EMAIL 
PROTECTED]>> wrote:
I'd start w/ -X:ExceptionDetail to get the full stack trace.  Presumably 
there's something higher up the stack then the MatchCaller on the stack.

-----Original Message-----
From: [EMAIL PROTECTED]<mailto:[EMAIL PROTECTED]> [mailto:[EMAIL 
PROTECTED]<mailto:[EMAIL PROTECTED]>] On Behalf Of Davy Mitchell
Sent: Saturday, November 08, 2008 6:19 AM
To: Discussion of IronPython
Subject: Re: [IronPython] ActiveX STA Issue in compiled Winforms EXE

Hi Michael

>Are you doing this from a separate thread?

No.

It's a couple of modules deep from the 'main' script. Was going to try
a single py file to repro.

> I assume it works fine when run uncompiled?

Yep, runs great.
Cheers,
Davy


On 11/8/08, Michael <[EMAIL PROTECTED]<mailto:[EMAIL PROTECTED]>> wrote:
> Are you doing this from a separate thread? I assume it works fine when
> run uncompiled?
>
>
> Michael
>
> http://www.ironpythoninaction.com
>
> On 8 Nov 2008, at 12:10, "Davy Mitchell" <[EMAIL PROTECTED]<mailto:[EMAIL 
> PROTECTED]>> wrote:
>
>> IPY 2.0 RC1
>>
>>
>> ActiveX Issue in a pyc compiled Winforms EXE which uses the
>> WebBrowser control.
>>
>> Unhandled Exception: System.Threading.ThreadStateException: ActiveX
>> control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot be
>> instantiated because the current thread is not in a single-threaded
>> apartment.
>>    at System.Windows.Forms.WebBrowserBase..ctor(String clsidString)
>>    at System.Windows.Forms.WebBrowser..ctor()
>>    at _stub_$643##332(Closure , CallSite , CodeContext , Object )
>>    at Microsoft.Scripting.Actions.MatchCaller.Call2[T0,T1,TRet]
>> (Func`4 target, C
>>
>> Help!! :-)
>>
>> Any thoughts before I delve further into this?
>>
>> Thanks
>> Davy Mitchell
>> _______________________________________________
>> Users mailing list
>> Users@lists.ironpython.com<mailto:Users@lists.ironpython.com>
>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
> _______________________________________________
> Users mailing list
> Users@lists.ironpython.com<mailto:Users@lists.ironpython.com>
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
_______________________________________________
Users mailing list
Users@lists.ironpython.com<mailto:Users@lists.ironpython.com>
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

_______________________________________________
Users mailing list
Users@lists.ironpython.com<mailto:Users@lists.ironpython.com>
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

_______________________________________________
Users mailing list
Users@lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

Reply via email to