C# 刷新浏览器';从.Net WinForms应用程序以编程方式创建的

C# 刷新浏览器';从.Net WinForms应用程序以编程方式创建的,c#,winforms,browser,refresh,C#,Winforms,Browser,Refresh,从asp.net页面,通过ClickOnce部署,启动.net WinForms应用程序。 在某个时刻,WinForm应用程序需要刷新启动它的网页 我怎么能这样做? 基于.Net的windows应用程序如何刷新已在浏览器中打开的页面?以下是一些示例代码,以满足您的需要(仅适用于相关部分): 注意:该代码是对的修改,要以健壮的方式做到这一点并不容易。例如,用户可能没有使用IE 网页和windows应用程序所共有的唯一控制对象是您的web服务器 这个解决方案很复杂,但这是我能想到的唯一可行的方法 1

从asp.net页面,通过ClickOnce部署,启动.net WinForms应用程序。 在某个时刻,WinForm应用程序需要刷新启动它的网页

我怎么能这样做?
基于.Net的windows应用程序如何刷新已在浏览器中打开的页面?

以下是一些示例代码,以满足您的需要(仅适用于相关部分):


注意:该代码是对

的修改,要以健壮的方式做到这一点并不容易。例如,用户可能没有使用IE

网页和windows应用程序所共有的唯一控制对象是您的web服务器

这个解决方案很复杂,但这是我能想到的唯一可行的方法

1) 在windows应用程序运行之前,获取网页以打开到web服务器的长轮询连接。“信号员”目前正为此受到广泛关注

2) 让windows应用程序在需要更新网页时向服务器发送信号

3) 在服务器上,完成长轮询请求,并将信号发送回web浏览器

4) 在网页中,通过刷新页面来处理响应


我说它很复杂

如果您确实需要从WinForms应用程序控制web浏览器,您可能应该使用
WebBrowser
控件。WinForm应用程序提供的功能仅是相关网页所属网站提供的功能的一小部分。不幸的是,没有选择,谢谢!这可能很复杂。。。但这是解决问题的方法。谢谢你的回答。非常有趣,对我来说是全新的。我一定会试试这个。但就目前而言,伊卡洛斯提出的更快的替代方案正是我所需要的。谢谢你的回答,我想这正是我所期望的。现在,我将尝试使用多种技术来枚举窗口,并准确地找到所需的窗口。我不一定同意下面发布的关于无法“可靠”识别浏览器窗口的答案。它是有效的。因为我现在只需要IE这个解决方案就足够了,它可以用于任何浏览器和任何版本,但显然只能在Windows操作系统上工作。实际上它不能。至少是你引用的代码。例如,如果浏览器窗口未最大化,则它不起作用。我意识到这太晚了(从正确回答我问题的角度来看)
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        // Get a handle to an application window.
        [DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
        public static extern IntPtr FindWindow(string lpClassName,
            string lpWindowName);

        // Activate an application window.
        [DllImport("USER32.DLL")]
        public static extern bool SetForegroundWindow(IntPtr hWnd);


        private void RefreshExplorer()
        {
            //You may want to receive the window caption as a parameter... 
            //hard-coded for now.
            // Get a handle to the current instance of IE based on window title. 
            // Using Google as an example - Window caption when one navigates to google.com 
            IntPtr explorerHandle = FindWindow("IEFrame", "Google - Windows Internet Explorer");

            // Verify that we found the Window.
            if (explorerHandle == IntPtr.Zero)
            {
                MessageBox.Show("Didn't find an instance of IE");
                return;
            }

            SetForegroundWindow(explorerHandle );
            //Refresh the page
            SendKeys.Send("{F5}"); //The page will refresh.
        }
    }
}