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

本文关键字:WinForm 调用 方法 启动 线程 | 更新日期: 2023-09-27 18:16:37

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

我有Class1,创建一个表单对象,并开始与Application.Run(Form1)Form1内部是一个封装的WebBrowser对象,我用它来导航到网页。Class1正在被控制台命令控制。我要做的一个例子是:

  1. Application.Run(Form1)发生在控制台应用程序启动时
  2. 我在控制台中输入loadpage1,然后调用Form1中的方法将浏览器导航到网页#1
  3. 我在控制台中输入loadpage2, Form1中会调用一个不同的方法,它会导航到网页#2

这可能吗?我已经尝试过直接调用方法,但似乎Application.Run()阻塞了控制台应用程序线程。

谢谢。

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

@Mike是对的,这篇文章是对这种技术的一个很好的深入描述。我只是想补充,那,在你的特定情况下,你要确保任何过程是从控制台处理命令作为一个参考到你的表单实例,其中有web浏览器控件。

比如

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

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