Можно ли управлять WinForm из другого консольного приложения на c #? - PullRequest
0 голосов
/ 08 марта 2011

Мне 2 дня. NET C # кодер пытается получить контроль над ProjectA - WinForm из ProjectB - консольное приложение C #.

В основном я использую WatiN для автоматизации тестирования в элементе управления WebBrowser в ProjectA.

Когда я запускаю ProjectB, который выполняет winformWithWebBrowserTest.exe, появляется winform с webbrowser. Но тогда он не может получить доступ к form1. Как я могу получить доступ к элементу управления веб-браузера из ProjectB ???

Ошибка:

System.Runtime.IteropServices.InvalidComObjectException
COM
object that has been separated from its underlying RCW cannot be used

ProjectA WinForm: (winformWithWebBrowserTest.exe)

namespace WindowsFormsApplication1
{
    public partial class Form1 : System.Windows.Forms.Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    }//end class

}//end namespace

Консольное приложение Project B: (WatinConsoleExample.cs)

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();

        }
    }
}

1 Ответ

1 голос
/ 08 марта 2011

Вы не можете сделать это, так как оба процесса работают в своем отдельном пространстве процессов, и вам нужно пройти через межпроцессное взаимодействие, которое не рекомендуется для двухдневного возраста:).

...