是否可以从另一个c#控制台应用程序控制WinForm?
我是2天大的.NET C#编码器,试图从ProjectB-C#控制台应用程序控制ProjectA-WinForm。 基本上,我使用WatiN在ProjectA中的WebBrowser控件中自动化测试 当我运行执行winformWithWebBrowserTest.exe的ProjectB时,会显示WinFormWithWebBrowser。但随后它无法访问form1。如何从ProjectB访问webbrowser控件 错误:是否可以从另一个c#控制台应用程序控制WinForm?,c#,.net,winforms,webbrowser-control,watin,C#,.net,Winforms,Webbrowser Control,Watin,我是2天大的.NET C#编码器,试图从ProjectB-C#控制台应用程序控制ProjectA-WinForm。 基本上,我使用WatiN在ProjectA中的WebBrowser控件中自动化测试 当我运行执行winformWithWebBrowserTest.exe的ProjectB时,会显示WinFormWithWebBrowser。但随后它无法访问form1。如何从ProjectB访问webbrowser控件 错误: System.Runtime.IteropServices.Inval
System.Runtime.IteropServices.InvalidComObjectException
COM
object that has been separated from its underlying RCW cannot be used
项目A WinForm:(winformWithWebBrowserTest.exe)
Project B控制台应用程序:(watincooleexample.cs)
您不能这样做,因为两个进程都在各自独立的进程空间中运行&您需要检查进程间通信,这对于2天以前的进程是不推荐的:)。是否有其他方法可以让我运行.exe(从c#构建)哪一个弹出winform并有我单独的c#代码来运行WatiN来对抗它???可能有一些替代方案,但我不知道有这样的情况,向你道歉。嗯,窗口处理程序呢?也许那样行。。但我必须进行测试。Visual Studio使用了一种机制,当您调试程序时,它会以编程方式创建一个进程,并将您的应用程序加载到同一进程空间中的该进程中,从而为您提供调试功能,我认为您应该对此进行一些研究。您不直接在浏览器中运行网站,并使用众多浏览器自动化工具中的一种来驱动它,比如watin或selenium,这有什么特别的原因吗?我的项目是使用selenium在.NET中对webbrowser启用自动化,但watin似乎是一条出路。
namespace WindowsFormsApplication1
{
public partial class Form1 : System.Windows.Forms.Form
{
public Form1()
{
InitializeComponent();
}
}//end class
}//end namespace
namespace ConsoleApplication1
{
class WatinConsoleExample
{
[STAThread]
static void Main(string[] args)
{
//run ProjectA exe
System.Diagnostics.Process Proc = new System.Diagnostics.Process();
Proc.StartInfo.FileName = "C:\\Users\\m-takayashiki\\Documents\\Visual Studio 2010\\Projects\\winformWithWebBrowserTest\\winformWithWebBrowserTest\\bin\\Release\\winformWithWebBrowserTest.exe";
Proc.Start();
WindowsFormsApplication1.Form1 form1 = new Form1();
var t = new Thread(() =>
{
Settings.AutoStartDialogWatcher = false;
//exception occurs below ..........
var ie = new IE(form1.webBrowser1.ActiveXInstance);
ie.GoTo("http://www.google.com");
ie.TextField(Find.ByClass("lst")).TypeText("this is awesome!!");
ie.Button(Find.ByName("btnG")).Click();
});
t.SetApartmentState(ApartmentState.STA);
t.Start();
}
}
}