好的,
我感到难过,在过去的几天里一直在寻找并试图找到一个没有运气的解决方案。
正在运行最新版本的CefSharp,对c#和vuejs进行编码。我可以通过localhost轻松获取Form1以显示我的主要网页。铬浏览器的设置和初始化很好。我可以通过
从网页传达回c#browser.JavascriptObjectRepository.Register("bBrowser", new JSInterface(), true);
在JavaScript方面,我有以下内容
async openStandings(){
await bBrowser.kappsopenStandings().then((result1)=>{
this.filler = result1
return result1
})
},
上面的代码在jsInterface类中调用以下c#函数
public bool kappsopenStandings(
)
{
bool m = false;
Standings S = new Standings();
S.Show();
m = true;
return m;
}
上面的Standings类是具有以下Load函数和InitBrowser函数的表单。
private void Standings_Load(object sender, EventArgs e)
{
this.StartPosition = FormStartPosition.CenterScreen;
InitBrowser();
}
和InitBrowser函数:
public void InitBrowser()
{
standingsbrowser = new ChromiumWebBrowser(thelink);
Dock = DockStyle.Fill;
this.Controls.Add(standingsbrowser);
Console.WriteLine("Created Window");
}
好吧,发生的事就是创建了积分榜窗口,所有内容都冻结并挂起。
现在,通过我的研究,我了解到,当我从网页进行调用时,我并没有影响UI线程,这似乎是我的问题所在。
如果我在表单上放置一个实际的c#按钮,然后单击它,那一切都很好。我试图对Form1上的visible = false按钮执行PerformClick(),结果与上述相同。
有人可以指出正确的方向来创建多个具有各自浏览器的winform吗?
谢谢,
Kory
您需要在WinForms UI Thread
上打开表单,下面的示例大致如下(我在Notepad ++中编写了此代码,因此我没有测试它是否可以编译,您应该了解基本思想。)>
public class JSInterface
{
private Form _form;
public JSInterface(Form form)
{
_form = form;
}
public bool kappsopenStandings()
{
//Marshal onto the WinForms UI Thread
_form.BeginInvoke(() =>
{
var standingsForm = new Standings();
standingsForm.Show();
});
return true;
}
}