从WinForm启动的线程调用WinForm方法

时间:2014-08-04 19:38:50

标签: c# .net multithreading winforms browser

我搜索并尝试了我已经找到的每个答案,但我找不到这种确切的情况。

我有Class1创建表单对象并使用Application.Run(Form1)启动它。内部Form1是我用来导航到网页的封装WebBrowser对象。 Class1由控制台命令控制。我正在尝试做的一个例子是:

  1. Application.Run(Form1)在控制台应用启动时发生
  2. 我在控制台中键入loadpage1,并调用Form1中的方法,将浏览器导航到网页#1
  3. 我在控制台中键入loadpage2,并调用Form1中的另一个方法导航到网页#2
  4. 这可能吗?我已经尝试过直接调用这些方法,但似乎Application.Run()阻止了控制台应用程序线程。

    谢谢。

1 个答案:

答案 0 :(得分:0)

@Mike是正确的this post是对这种技术的深入描述。我只是想补充一点,在您的特定情况下,您希望确保从控制台处理命令的任何进程作为对其中具有Web浏览器控件的表单实例的引用。

所以,像

CustomForm f = //get reference to web browser form
f.Invoke(() => { //whatever you want to do on the form's thread };

Invoke()确保lambda表达式中执行的任何内容都在表单/控件的线程上执行。