如何从主窗体开启多个线程,分别打开含有WebBrowser窗体,并同时分别单独运行?
Form1是主窗体,frmWeb是含有WebBrower的窗体(登录器)。
在Form1中开启多个线程,在每个线程中打开Web窗体,通过从主窗体中传过去的帐号信息,实现自动登陆。
登录之后,通过在frmWeb中加的事件TaskReport,报告登录是否完成等信息。
由于BackGroundWorker不支持WebBrowser,就用Thread建立STA线程。
现在问题是:如何才能在各个STA线程中顺利运行frmWeb?
1) 用task.webForm.Show(),窗体一闪而过;
2) 用task.webForm.ShowDialog(),可以打开多个,但是登录的都是同一个帐号,感觉Show了以后,卡在Break了;
3) 用Application.Run,相当于运行完全转到frmWeb了。
如何才能实现想要的功能?
因为主窗体和Web窗体之间还有交互,不想在另外的进程中开启Web窗体。
public partial class Form1 : Form
{
public class TaskArg
{
public string loginID;
public string password;
public Thread thread;
public frmWeb webForm;
}
public List<TaskArg> lstTask = new List<TaskArg>();
string[] loginIDs = new string[] { 省略 };
string[] password = new string[] { 省略 };
public Form1()
{
InitializeComponent();
}
void CreateThreadWeb()
{
for (int i = 0; i < loginIDs.Length; i++)
{
TaskArg task = new TaskArg();
task.loginID = this.loginIDs[i];
task.password = this.password[i];
task.thread = new Thread(ThreadProc);
task.thread.SetApartmentState(ApartmentState.STA);
lstTask.Add(task);
task.thread.Start(task);
}
}
void ThreadProc(object taskArg)
{
TaskArg task = taskArg as TaskArg;
//lock (this.lstTask)
{
int i = lstTask.Count - 1;
for (; i >= 0; i--)
if (lstTask[i].Equals(task))
{
task.webForm = new frmWeb(task.loginID, task.password );
task.webForm.TaskReport += new ProgressChangedEventHandler(webForm_TaskReport);
task.webForm.ShowDialog();
//task.webForm.Show();
//Application.Run(task.webForm);
break;
}
}
}
void webForm_TaskReport(object sender, ProgressChangedEventArgs e)
{
//
}
}
相关推荐
强制新窗口只在webBrowser打开
本资源是针对C#winform开发的webBrowser控件进行的操作,webBrowser网页控件在实际应用中默认点击里面的链接是跳转到浏览器打开,该资源正是解决此问题,只在winform里打开。
C#写的轻量IE浏览器,WinForms封装WebBrowser控件,开箱即用
用C#在WinForms框架下封装系统自带IE内核(Trident),实现一个功能完整的桌面浏览器程序。支持地址栏输入、前进/后退、刷新、停止、主页跳转等基础操作,所有功能基于原生WebBrowser控件扩展,不依赖额外安装包,编译后双击即可运行。项目包含自定义WebBrowser类、IOleCommandTarget接口实现用于命令拦截与增强控制、主窗体逻辑及配套资源文件(图标、多语言resx、按钮图片等)。解决方案结构完整,含.sln工程文件、.csproj项目配置、bin/obj输出目录占位、升级报告
别再用IE了!用CefSharp+Winform打造现代桌面应用,让网页交互丝滑到飞起
这篇文章分享了在WinForm应用中集成CefSharp浏览器的实战经验,主要包含以下要点: 为什么要用CefSharp替代WebBrowser控件: 大幅提升页面加载速度 完美支持现代Web技术(HTML5/CSS3/JS) 无缝集成主流前端框架 详细实现步骤: 环境准备:要求VS2022和.NET 4.7.2+ 通过NuGet安装必要的CefSharp组件包 正确的初始化方式(必须在UI线程执行) 核心代码实现浏览器控件嵌入 JavaScript交互技巧 关键注意事项: 必须设置特定平台(x86/x64
基于WebView2的WinForm个性化浏览器开发:从内核定制到工程实践
在现代桌面应用开发中,嵌入浏览器内核已成为基础需求,它实现了Web技术与本地系统的深度融合。其核心原理是通过Chromium内核提供现代Web标准支持,同时通过API实现深度行为控制。这一技术的核心价值在于平衡了Web生态的丰富性与桌面应用的可控性,广泛应用于企业内部系统集成、定制化工具面板、以及需要本地硬件交互的混合应用场景。本文聚焦于WebView2这一微软官方组件,深入探讨如何在WinForm框架下构建一个高度定制化的“自用”浏览器,涵盖从环境初始化、广告拦截到自定义下载管理等关键功能的实现,为.NE
基于C# WinForm与WebView2打造个性化桌面浏览器:从零到一实战指南
在现代桌面应用开发中,将Web内容嵌入原生程序已成为提升开发效率和用户体验的重要技术路径。其核心原理在于通过浏览器内核渲染引擎,在应用窗体中无缝加载和交互网页内容,实现Web技术的强大表现力与桌面应用原生能力的结合。这一技术为开发者带来了显著价值:既能利用丰富的Web生态快速构建功能模块,又能通过原生代码深度控制系统资源与交互逻辑。典型的应用场景包括企业内部管理系统、数据监控仪表盘、信息聚合客户端以及需要定制化界面的专用工具。本文聚焦于使用C# WinForm框架与微软官方的WebView2控件,详细讲解如


