2

我在 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”类型的第一次机会异常

4

2 回答 2

2

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

App.myclass.addEventListener("nowevent", function onReady() {
        console.error("hello");
    });
于 2012-09-07T16:57:33.067 回答
0

您可以使用该WinJS.Application.queueEvent("myEvent")功能。然后,您可以将事件侦听器添加到WinJS.ApplicationviaWinJS.Application.addEventListener("myEevent",function(){});

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

WinJS.Class.mix(EventObject, eventMixin);

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

于 2012-09-07T16:45:11.070 回答