我用vs2005 开发windows服务程序 在其中动态创建WebBrower对象,但Navigate后不响应 DocumentCompleted事件,而是去执行接下的程序, 事件发生时需要处理的方法,已经用委托关联上了。
实在不知道问题出在哪!请各位提出下自己的看法,帮我拓展解决问题的思路。

解决方案 »

  1.   

    把mshtml.dll拷贝到你的应用程序目录下面试一下。
      

  2.   

    我这么测试一下,Button2 Click以后可以执行DocumentCompleted的。
    不知道lz是怎么做的?
    Public Class Form1    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim frm As New Form
            Dim wb As New WebBrowser
            frm.Controls.Add(wb)
            wb.Dock = DockStyle.Fill
            wb.Navigate("http://www.baidu.com")
            frm.Show()
        End Sub    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim frm As New Form
            Dim wb As New WebBrowser
            AddHandler wb.DocumentCompleted, AddressOf Me.DocumentCompleted
            frm.Controls.Add(wb)
            wb.Dock = DockStyle.Fill
            wb.Navigate("http://www.baidu.com")
            frm.Show()
        End Sub    Private Sub DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs)
            MsgBox("Test")
        End SubEnd Class
      

  3.   

    选择与桌面交互,把窗体调出来,然后附加进程,在gui界面上调试
      

  4.   


    StartCheckServiceTimer()方法每隔一段时间会被调用一次,另外因为是windows服务程序,所以不能做成winform,所以不能交互。不能再窗体上拖一个webbrower控件过来。只能用new的方法,动态创建对象。
    private void StartCheckServiceTimer()
    {
    TimerCallback timerDelegate = new TimerCallback(OnWebMontiorServiceTimer);
    }
    单线程是在这里设置的。
    private void OnWebMontiorServiceTimer(Object state)
    {
             Thread myThread = new Thread(new ThreadStart(doAction));
             myThread.SetApartmentState(ApartmentState.STA);         myThread.Start();         myThread.Join(); }
    private void doAction()
    {
       WebBrowerMontior(string url) } private void WebBrowerMontior(string url) 
    {
      webBrowserForMontior = new WebBrowser();
      webBrowserForMontior.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(WebBrowserCompleted);
      webBrowserForMontior.Navigate(new Uri(url));
    } private void WebBrowserCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    {
    }
      

  5.   

    windows服务也可以用winform,服务里面选择与桌面交互就可以了
      

  6.   

    windows service 中如何成功运行 webbrowser? 
    如果能解决这个问题,就什么都解决了.我先试试楼上的办法
      

  7.   

    onstart的时候修改注册表   
       [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\你的服务名] 
    桌面交互  
      

  8.   

     谢谢楼上,另外8楼的jinjazz也就是说我可以在服务的项目里,添加一个winform窗体,在窗体上放webbrower控件。这种说法可行吗?