C# 如何在windows窗体应用程序和WebBrowser控件之间进行通信

C# 如何在windows窗体应用程序和WebBrowser控件之间进行通信,c#,asp.net,winforms,webbrowser-control,viewmodel,C#,Asp.net,Winforms,Webbrowser Control,Viewmodel,是否有任何机制可以将数据从包含windows窗体的应用程序推送到webbrowser控件中。具体来说,webbrowser控件包含一些knockout.js,我希望允许一些外部事件(例如对本地文件系统中某些文件的更改)来更新knockout viewModel 目前,我已经通过webbrowser控件中的JS向运行在windows窗体应用程序中的微web服务器发出长轮询jsonp请求(请注意,这不是网页本身是jsonp服务器的地方。此外,微web服务器基本上只是一个httpListner). 当

是否有任何机制可以将数据从包含windows窗体的应用程序推送到webbrowser控件中。具体来说,webbrowser控件包含一些knockout.js,我希望允许一些外部事件(例如对本地文件系统中某些文件的更改)来更新knockout viewModel

目前,我已经通过webbrowser控件中的JS向运行在windows窗体应用程序中的微web服务器发出长轮询jsonp请求(请注意,这不是网页本身是jsonp服务器的地方。此外,微web服务器基本上只是一个httpListner). 当forms应用程序收到文件更改事件时,它会通过micro Web服务器返回响应,并更新knockout viewmodel

问题是,这一切感觉都很脆弱——如果文件事件变得又厚又快,它们可能会开始被跳过——看起来我的micro Web服务器正试图将多个结果返回到同一个流。我可以解决这个问题,但总的来说,它看起来又脏又脆弱


问题是:我是否缺少更简单的方法让包含应用程序向在webbrowsercontrol中运行的网页发送信号(即传递一些JSON)(无需页面刷新!)

您可以创建一个元素,比如一个id为的div

<div id='external-json' data-bind='jsonHandler : {}' style='display:none'></div>
您甚至可以创建一个敲除自定义绑定来对此作出反应

    ko.bindingHandlers.jsonHandler = {
        update: function(element, valueAccessor) {
        //do something with the json
        var json = element.innerText;
        var obj = eval(json); //hmm
        alert(obj.test); 
    }
};

这显然是一个简单的例子,您可能会对这个想法进行很多改进,您可能需要一个消息队列,可能需要在客户端脚本中调用函数而不是使用元素。

这太棒了。我喜欢它。我根本不知道这是可能的!知道这是一个快速的谷歌发现我这可能是有用的其他我认为你可以做到这一点,但我太懒了看。这似乎是一种更加可靠的方法:)
    ko.bindingHandlers.jsonHandler = {
        update: function(element, valueAccessor) {
        //do something with the json
        var json = element.innerText;
        var obj = eval(json); //hmm
        alert(obj.test); 
    }
};