我写了一个 WinForm,里面用到了一个VB写得OCX控件。OCX的线程模型是“单元线程”。运行正常
我把这个WinForm应用当成SmartClient部署到了IIS(5.0,6.0都测试过)的虚拟目录中,在客户端访问后出现以下错误提示:未处理的“System.Threading.ThreadStateException”类型的异常出现在 system.windows.forms.dll 中。其他信息: 因为当前线程不在单线程单元中,故无法实例化 ActiveX 控件“c88f4186-3315-49f7-a457-668ac723042d”。请问各位大侠这个问题怎么解决?急昐。多谢各位大侠。
我把这个WinForm应用当成SmartClient部署到了IIS(5.0,6.0都测试过)的虚拟目录中,在客户端访问后出现以下错误提示:未处理的“System.Threading.ThreadStateException”类型的异常出现在 system.windows.forms.dll 中。其他信息: 因为当前线程不在单线程单元中,故无法实例化 ActiveX 控件“c88f4186-3315-49f7-a457-668ac723042d”。请问各位大侠这个问题怎么解决?急昐。多谢各位大侠。
解决方案 »
- 如何制作类似遨游、猎豹、QQ的安装程序界面?
- C# webbrowser如何选定select标签并触发change事件
- PB代码转换成C#代码,求高手指点
- 汉字转byte[] 的基本原理是啥?答对给50分.另送50分给要分的人.
- c# 数据库操作后如何刷新datagridview
- "在向服务器发送请求时发生传输级错误。 (provider: 共享内存提供程序, error: 1 - 执行读/写操作期间检测到 I/O 错误。)"
- 新手求救!!求解释
- C#做进销存POS收银软件通用软件好吗?
- C# 调用 c++dll 参数为结构体 求大神指教
- 如何合并byte[],急,在线等~~~
- 求一简单正则表达式
- 如何在DATAGRID中插入一行(默认是在最底插入),在线等!
static void Main()
{
//....
}
你看一下有关SmartClient的东东.在IIS上设置一个虚拟目录,把Windows托管应用部署到此虚拟目录中.通过Url方式访问后,IE不会提示下载该exe(前提是你要装 .net framework而且没有其它的下载工具),而是把此exe运行在一个IEExec.exe的进程里.
思归的两个方法都应该可行
我想从两个主面入手解决这个问题,一是看能不能让VB的控件编译成MTA模型,这个好像行不通.二是把SmartClient的载体IEExec.exe 得运行方法改为单线程,这个好像也没什么答案.比较郁闷.如果不用smartclient,系统可正常运行,但那我写得这个东东的发布将异常困难,要发布到将近一千台客户端上.如果以后再有什么小毛病修改的话,部署 到这么客户端简值是个噩梦.请两位老大麻烦一下,写个例子试试,帮小弟一个忙.多谢!!
{
public mainfun()
{
}
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
frmLogin frmLog=new frmLogin();
Splash sp=new Splash (); if(frmLog.ShowDialog() ==System.Windows.Forms.DialogResult.OK)
{
//前面显示登录框.系统运行到这里出错.frmMain窗体里用到了一个VB开发的OCX
frmMain frmmain=new frmMain();
frmmain.My_opid=frmLog.M_opid; frmmain.userinfo=frmLog.userinfo; frmmain.isAutoChkinCCS=frmLog.isAutoChkinCCS ; frmmain.AgentInfo=frmLog.AgentInfo ; frmmain.UserType=frmLog.UserType; frmmain.taskPrx=frmLog.taskPrx;
frmmain.staffs =frmLog.staffs;
frmmain.AgentList = frmLog.AgentList ;
Application.Run(frmmain); }
else
{
frmLog.Close();
frmLog.Dispose();
} Application.Exit();
System.Diagnostics .Process pross=System.Diagnostics.Process.GetProcessesByName ("OneCall")[0];
pross.Kill (); }
}
{
Thread.CurrentThread.ApartmentState = ApartmentState.STA;
Application.EnableVisualStyles();
frmLogin frmLog=new frmLogin();
Splash sp=new Splash ();and it didn't work?what if you do?static frmLogin frmLog;static void Main()
{
Application.EnableVisualStyles();
frmLog=new frmLogin();
Splash sp=new Splash (); if(frmLog.ShowDialog() ==System.Windows.Forms.DialogResult.OK)
{
ThreadStart ts = new ThreadStart(RunThread);
Thread t = new Thread(ts);
t.ApartmentState = ApartmentState.STA;
t.Start();
}
else
{
frmLog.Close();
frmLog.Dispose();
}
}
static void RunThread()
{
frmMain frmmain=new frmMain();
frmmain.My_opid=frmLog.M_opid;
frmmain.userinfo=frmLog.userinfo;
frmmain.isAutoChkinCCS=frmLog.isAutoChkinCCS ;
frmmain.AgentInfo=frmLog.AgentInfo ;
frmmain.UserType=frmLog.UserType;
frmmain.taskPrx=frmLog.taskPrx;
frmmain.staffs =frmLog.staffs;
frmmain.AgentList = frmLog.AgentList ;
Application.Run(frmmain);
}