Rückruf von Hintergrundaufgaben in WinRT (Cordova Windows-Plugin)

8

Ich mache Plugin für Cordova und im Moment versuche ich, es Windows-Plattform zu unterstützen. Ich habe eine DLL in C # geschrieben und möchte Funktionen von dort in meinem Plugin verwenden. Um dies zu tun, habe ich Windows Runtime Component-Projekt, das "Wrapper" um C # DLL ist und von dort aus ich Methoden in Cordova Java Script offenlegen und ich kann sie erfolgreich aufrufen. Also, die Kommunikation zwischen

%Vor%

funktioniert gut.

Irgendwann (in einer der Methoden in C # DLL) versuche ich folgendes zu tun:

%Vor%

Sobald die Codeausführung in diesen Teil gelangt ist, kam ich zu dem Schluss, dass die App diesen Teil einfach überspringt und die Methode "ProcessQueue ()" niemals im Hintergrund ausgeführt wird. Zuerst dachte ich, dass dieses Problem mit der Art und Weise zusammenhängen könnte, wie ich diese Aufgabe in C # starte, also habe ich mehrere Ersetzungen versucht, um eine neue Hintergrundaufgabe zu starten - kein Glück.

Dann dachte ich, dass ich einen Anruf in Java Script-Plugin von Hintergrund-Thread machen könnte (ich bin kein Cordova / Java Script-Experte, wie Sie von dieser Annahme sehen), aber schnell klar, dass es nicht gonna passieren. Ich entdeckte, dass auf nativen Code Anrufe als Teil von Cordova Plugins ausgeführt werden, nicht im Haupt UI-Thread, sondern in einem anderen Thread, aber immer noch, scheint unmöglich Hintergrundaufgabe von C # DLL in diesem Thread zu erstellen.

Dann habe ich über Hintergrundaufgaben in WinRT-Komponenten gelesen und versucht, dies zu implementieren. Ich habe dieses Projekt als Referenz: Ссылка

In diesem Projekt lösen sie die Hintergrundaufgabe aus C # app aus. Ich weiß nicht, wie man es von Cordova App aus macht (ist es sogar möglich, es von dort zu tun?), Also habe ich versucht, es auszulösen, wenn eine Methode von WinRT-Komponente von Java Script Proxy aufgerufen wird. Im Grunde existiert meine Hintergrund-Aufgabenklasse in der WinRT-Komponente (wie im Beispiel), aber ich trigge sie von WinRT und nicht von der App aus. Natürlich ist ein weiterer Unterschied, dass ich package.windows10.appxmanifest der Cordova App verwendet habe, um Hintergrundaufgaben zu registrieren.

Nachdem ich dies getan habe, erhalte ich keine Kompilierfehler, Code zum Auslösen der Aufgabe funktioniert und wird ausgeführt, aber die Run-Methode der Hintergrundaufgabe wird nie aufgerufen.

Also, meine Frage an Sie wäre: Weiß jemand, wie ich dieses Ding erreichen kann? Wie starte ich die Hintergrundaufgabe in der WinRT-Komponente oder im Windows Cordova-Plugin allgemein?

Vielen Dank im Voraus für jede Art von Antwort.

Prost

Update # 1

Okay, ich habe mein Problem gelöst und hier ist der Code.

Ich habe die WinRT-Komponente mit der Dummy.cs-Klasse erstellt, die ein Einstiegspunkt für WinJS-Code ist und ein eigenes Objekt von mir als Parameter erhält. Klasse sieht so aus:

%Vor%

Und meine Hintergrundaufgabe sieht so aus:

%Vor%

Neues Problem, das ich habe, folgt. Wenn ich Argumente "packe", um sie an die Hintergrundaufgabe zu senden, hast du vielleicht diese Zeile bemerkt:

%Vor%

In meinem Fall soll nowWhat delegate sein. Also, entweder in WinJS oder in WinRT Ich möchte Methode erklären, die ich in den Hintergrund Aufgabe übergeben wollen, um sie auszuführen, sobald eine gewisse Logik in dort ausgeführt (asynchrone Sache).

Argumente, die an die Hintergrundaufgabe übergeben werden, müssen serializable sein.

Haben Sie eine Ahnung, wie kann ich pass delegate oder Action oder Func von WinRT auf Hintergrundaufgabe, so dass ich ein paar Sachen von Hintergrundaufgabe zurück zu WinRT berichten? Oder wenn es andere Möglichkeiten gibt, dies zu erreichen, wäre ich an Vorschlägen interessiert?

Vielen Dank im Voraus.

    
uerceg 24.02.2016, 15:06
quelle

0 Antworten