C# 打开新窗口
好,大家, 我一直在自寻烦恼,在过去的几天里一直在寻找并试图找到一个解决方案,但运气不佳 运行最新版本的CefSharp,编码c#和vuejs。我可以通过localhost轻松获得Form1来显示我的主网页。chromium浏览器的设置和初始化正常。我可以通过网页与c#进行通信C# 打开新窗口,c#,winforms,browser,cefsharp,C#,Winforms,Browser,Cefsharp,好,大家, 我一直在自寻烦恼,在过去的几天里一直在寻找并试图找到一个解决方案,但运气不佳 运行最新版本的CefSharp,编码c#和vuejs。我可以通过localhost轻松获得Form1来显示我的主网页。chromium浏览器的设置和初始化正常。我可以通过网页与c#进行通信 browser.JavascriptObjectRepository.Register("bBrowser", new JSInterface(), true); 在javascript方面,我有以下内容 async
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按钮上执行Click(),结果与上面相同
有人能告诉我创建多个winforms的正确方向吗?每个winforms都有自己的浏览器
谢谢,
Kory您需要在
WinForms UI线程
上打开表单,下面是一个大致类似的示例(我用Notepad++编写了这个示例,所以我还没有测试它是否编译,您应该了解基本的想法)
请指定您正在使用的确切版本,最新版本是相对的。在几个月后,任何版本都将意味着不同的内容。您需要在WinForms UI线程上调用UI代码。在JSInterface类中,在构造函数中传递对窗体的引用,然后使用该引用在UI线程上调用。对不起,是的,CEFSharp Common是75.1.142。@amaitland我将传递对Form1或StandingForm的引用吗?我的意思是,在你的实例中,当前活动的表单Form1@amaitland好的,我已经准备好了。是否有资源可用于学习如何调用此特定案例。
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;
}
}