gpt4 book ai didi

c# - 通知主机更改

转载 作者:行者123 更新时间:2023-11-28 07:59:06 25 4
gpt4 key购买 nike

我有一个 ASP.NET 应用程序和一个托管 WebBrowser 的 C# 应用程序。 ASP.NET 应用程序通过 C# 应用程序运行。

当单击按钮时,我需要通知 C# 应用程序。最好的方法可能是通过 Javascript。这看起来并不复杂,因为我可以公开 javascript window.external 的函数,但我的 C# 应用程序看到的唯一 URL 是/Default.aspx。所有 javascript 函数 (window.external.myfunc(..)) 都必须来自此页面。

有什么想法吗?我变得一片空白。我也有点不确定如何从代码隐藏中调用 javascript 函数。 ScriptManager.RegisterClientScriptBlock 好像用得很多,但是这个可以在一个页面调用多次吗?

谢谢!

顺便说一句,对于 C# 客户端,我使用 WebBrowser.ObjectForScripting 来自定义对象,该对象将从 Javscript 获取这些 window.external 函数调用。这有效。

最佳答案

带有 ObjectForScriptingwindow.external 的部分可以正常工作。

为了从 ASP.NET 代码中调用 js 函数,您应该使用 js 中的 ajax 调用。有两种方法:

1- 创建一个 Web 服务并不断调用它来检查发生的任何情况(即轮询)。这是最简单的方法,可以轻松实现,例如使用 jQuery:

$.ajax(...);

然后从回调中调用 window.external.func() 到该 ajax 调用(当然,如果它返回预期值)。请注意,使用此方法时,您总是会遇到延迟,因为客户端应该轮询服务器。

2- 与服务器建立连接并保持打开状态,然后在准备就绪时从服务器发送数据。对于这个问题,您可以使用诸如 SignalR 之类的东西。这将解决延迟问题,但会保持开放连接,从而带来其他问题。

实际上,决定这两种方法之间的主要因素是您是否接受延迟。如果平均等待15秒没有问题,就使用第一种方法,轮询时间为30秒。如果您希望它是实时的,请使用第二种方法,但要小心其自身的问题,例如长时间运行的连接、SignalR 中缺少 session 状态等。

我只是想向您展示选择。如果有任何不清楚的地方请告诉我。

关于c# - 通知主机更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25646879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com