Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;未指定错误“;来自Silverlight应用程序中的javascript_C#_Javascript_Asp.net_Silverlight - Fatal编程技术网

C# &引用;未指定错误“;来自Silverlight应用程序中的javascript

C# &引用;未指定错误“;来自Silverlight应用程序中的javascript,c#,javascript,asp.net,silverlight,C#,Javascript,Asp.net,Silverlight,我有一个用C#编写的Silverlight应用程序,它利用了Bing地图SDK。在这个应用程序中,我有一个包含一些javascript函数的页面,用于公开应用程序中的函数。应用程序将Bing MapControl注册到主页的构造函数中: HtmlPage.RegisterScriptableObject("Page", new MapControl(this.BingMap)); 在javascript函数中,我调用应用程序的方法如下: <script type="text/javas

我有一个用C#编写的Silverlight应用程序,它利用了Bing地图SDK。在这个应用程序中,我有一个包含一些javascript函数的页面,用于公开应用程序中的函数。应用程序将Bing MapControl注册到主页的构造函数中:

HtmlPage.RegisterScriptableObject("Page", new MapControl(this.BingMap)); 
在javascript函数中,我调用应用程序的方法如下:

<script type="text/javascript">
    function ClearMap() {
        var control = document.getElementById('silverlightControl');
        control.Content.Page.ClearMap();
    }
</script>
这是奇怪的部分。我正在使用来自其他两个应用程序的silverlight应用程序。一个是windows服务,另一个是winform应用程序。winform将一个可见的WebBrowser嵌入到它的表单中,并使用它来调用javascript函数。使用winform时,一切正常,没有错误

该错误仅在从windows服务调用这些函数时发生。该服务像winform应用程序一样实例化WebBrowser对象,并以相同的方式初始化所有内容。唯一的区别是它是作为服务运行的,WebBrowser不可见,也不以任何形式嵌入。这个事实可能会导致这个错误吗

目前,我的winform应用程序、windows服务和silverlight应用程序的Web服务都在我自己的本地计算机上运行

更新

在Gnostus的评论之后,我发现我遇到的主要问题是没有创建“页面”对象,因为在从基于windows服务的WebBrowser导航到webservice之后,App类从未初始化。winform应用程序和服务的执行方式完全相同:

WebBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(WebBrowser_DocumentCompleted);
WebBrowser.Navigate("http://localhost:56062/BingMapsWebServiceTestPage.aspx");
while (WebBrowser.ReadyState != WebBrowserReadyState.Complete)
    System.Windows.Forms.Application.DoEvents();
我在主页的构造函数中添加了一些代码,它在其中调用HtmlPage.RegisterScriptableObject(“Page”,new MapControl(this.BingMap));当它被点击时,它会记录一些文本。在winform应用程序的WebBrowser中运行上述代码时,会发生以下情况:

  • DocumentCompleted事件被触发两次(一次由浏览器触发,我假设一次由silverlight控件触发)
  • App()已初始化,“Page”元素已成功添加到主页的构造函数中
  • 上述while循环完成
  • 当我从windows服务执行相同操作时,它会执行1和3,但不会执行2。第2步只有在调用引用页面对象的javascript函数时,并且只有在出现错误后才会被执行

    更新2


    在一个新的winform应用程序中混乱之后,我发现每当WebBrowser或其父窗体不可见时,调用Navigate()时silverlight控件将无法加载。我发现,如果在silverlight应用程序完成加载后父窗体被隐藏,仍然可以调用我的javascript函数。除了闪烁可见表单外,还有谁知道更好的方法来强制silverlight应用程序加载吗?甚至可以从windows服务中显示表单吗,或者我必须重新考虑作为控制台应用程序的整个过程吗?

    元素不可能不从dom中获取?我不太清楚您的意思。对不起,javascript不是我的强项,我对silverlight完全陌生。您的意思是可能有人正在删除“Page”元素吗?我无法想象会发生什么,我想如果发生了什么事情,它也会影响winform应用程序。此外,我非常确定silverlightControl元素也正在被找到。如果我用“var control=document.getElementById('silverlightControl');”设置一个变量,那么请参考“control.Content”,它可以正常工作,没有任何错误。啊,这或多或少是我的问题,所以我唯一的帮助是获取firebug,在设置控制变量并查看其属性并确保页面属性存在后,设置断点。谢谢提示。经过更多的调试,我发现它实际上还没有被创建。在windows服务中运行时,主页的构造函数在javascript函数之后被调用,因此页面元素当时不存在。winform中不是这样,但我不知道为什么。现在我只需要弄清楚为什么在调用javascript函数时没有实例化主页面。
    WebBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(WebBrowser_DocumentCompleted);
    WebBrowser.Navigate("http://localhost:56062/BingMapsWebServiceTestPage.aspx");
    while (WebBrowser.ReadyState != WebBrowserReadyState.Complete)
        System.Windows.Forms.Application.DoEvents();