为什么c# winform从vbscript调用时不显示

本文关键字:显示 调用 vbscript winform 为什么 | 更新日期: 2023-09-27 18:05:56

我用c#写了一个API,将在vb6中使用&vbscript和假设我的API细节如下:
1。API中有一个表单,但它没有暴露给COM
2。有一个名为ShowForm()的方法,代码为"form1.Show()"。这个方法ShowForm()是暴露给COM的,所以我可以从vb6/vbscript调用这个方法。

所以,我的问题是:
当我调用ShowForm()方法在vb6下的按钮点击事件,在c# API中创建的表单显示,但如果我实例化相同的类,并在vbscript中调用相同的方法,表单不显示。

但是,如果我改变ShowForm()中的代码,
-从"form1.Show()"到"form1.ShowDialog()",它将在vb6/vbscript中显示。但是,它显示为一个模态形式,我想要的是无模态或
-从"form . show()"到"Application.Run(form1)"它将显示在vbscript,但不是在vb6(它实际上显示在vb6,但它崩溃后,我关闭窗体在c#)

我能做些什么使它在vb6和vbscript中工作得很好?非常感谢您的建议。

PS:这不是脚本语法问题或COM问题。它应该与form.show()/ShowDialog()/Application.Run()或消息循环有关,这是我真的不明白的东西

我的代码大概是这样的。

//C# code
public void ShowForm()
{
 m_frm.tempWebBrowser.Navigate("http://stackoverflow.com", "_self", Encoding.Default.GetBytes(""), "Content-Type: application/x-www-form-urlencoded");
 m_frm.FormBorderStyle = FormBorderStyle.Sizable;
 m_frm.ShowInTaskbar = true;
 m_frm.WindowState = FormWindowState.Maximized;
 m_frm.tempWebBrowser.Visible = true;
 m_frm.Show();     
}
//VB6 code, vbscript also using exactly the same code in the event
Private Sub Command1_Click()
 Dim tempClass
 Set tempClass = CreateObject("myClass.API")
 tempClass.ShowForm
End Sub

为什么c# winform从vbscript调用时不显示

表单没有完全显示,因为您的建议…线程上没有运行消息泵。如果你试图从VBScript中启动c#窗口,我建议你在一个单独的进程中启动它。这和你描述的效果是一样的。如果你试图启动它并等待用户与之交互(比如你正在提示他们获取信息),那么以模式显示形式是合适的。