【问题标题】:How to catch own C# events in Javascript code in Win8 Metro apps?如何在 Win8 Metro 应用程序的 Javascript 代码中捕获自己的 C# 事件?
【发布时间】:2012-09-07 16:17:30
【问题描述】:

我在 google 中找到了如何在 Javascript 代码中为 C# 事件实现事件侦听器的示例,但在我的情况下,似乎没有任何效果。

我的 C# 类:

namespace Engine
{

    public delegate void EventDelegate();

    public sealed class MyClass;
    {
        public event EventDelegate nowEvent;

        public void runJobs()
        {
           if (nowEvent == null)
           {
             Debug.WriteLine("What? Nobody subscribed???");
           }
        }
    }
}

Javascript 方面:

WinJS.Namespace.define("App", {
    myclass: new Engine.MyClass()
});

App.myclass.addEventListener("nowEvent", function onReady() {
            console.error("hello");
        });

App.myclass.runJobs();

将 onReady 函数附加到 nowEvent 事件并运行 runJobs() 后,MyClass.nowEvent 为空。

在 JS 中订阅自己的类的 C# 事件的工作语法是什么。有什么想法吗?

编辑:根据 Gambit 的建议:

App.myclass.addEventListener("nowevent", function onReady() {
                console.error("hello");
            });

事件指针不再为空,但是当我触发事件时,我得到:

Engine.winmd 中发生了“System.InvalidCastException”类型的第一次机会异常

【问题讨论】:

    标签: c# javascript events windows-8 microsoft-metro


    【解决方案1】:

    您可能会遇到投影更改所用语言名称大小写的方式。对于 Javascript,事件的约定是小写的。所以在 C# 中,您将事件定义为“nowEvent”,在 Javascript 中您将其称为“nowevent”。

    App.myclass.addEventListener("nowevent", function onReady() {
            console.error("hello");
        });
    

    【讨论】:

    • 上帝。问题解决了。我把头撞在墙上好几个小时。谢谢! :)
    • 好的,指针现在不为空,但是当事件被触发时,我得到:Engine.winmd 中发生了“System.InvalidCastException”类型的第一次机会异常
    • 策略:if (nowEvent != null) { nowEvent(); }
    • 您拼出的代码应该可以正常工作。查看您的 C# 类中还有哪些其他代码。
    • Gambit:现在问题已确定:我的 C# 模块异步执行任务,当这些任务完成时,会发出事件。问题是异步任务。 (线程问题?)
    【解决方案2】:

    您可以使用WinJS.Application.queueEvent("myEvent") 函数。然后,您可以通过WinJS.Application.addEventListener("myEevent",function(){});WinJS.Application 添加事件侦听器

    您还可以使用WinJS.Utilities eventMixin 将事件添加到类。

    WinJS.Class.mix(EventObject, eventMixin);
    

    然后您可以在应用了 mixin 的类上使用 addEventListener、removeEventListener 等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多