2

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はnullになります。

JSで独自のクラスのC#イベントをサブスクライブするための実用的な構文は何ですか。何か案は?

編集:ガンビットのアドバイスの後:

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

イベントポインタはもうnullではありませんが、イベントを発生させると、次のようになります。

タイプ「System.InvalidCastException」の最初のチャンスの例外がEngine.winmdで発生しました

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.Applicationその後、イベントリスナーをビアに追加できますWinJS.Application.addEventListener("myEevent",function(){});

WinJS.Utilities eventMixinを使用して、イベントをクラスに追加することもできます。

WinJS.Class.mix(EventObject, eventMixin);

その後、ミックスインが適用されたクラスで addEventListener、removeEventListener などを使用できます。

于 2012-09-07T16:45:11.070 に答える