Ich habe derzeit ein Arbeitsprojekt, bei dem ich eine C# WinRT-Komponente in einer Win32-Konsolen-App unter Verwendung eines Registrierungsfreien WinRT verbringe. Alles funktioniert gut, aber das
Problem tritt auf, wenn ich versuche, asynchronisierte Methoden aus der C# -Komponente zu verwenden. Da Task s keine WinRT -Typen sind, habe ich nach einer Lösung gesucht. Wie können Sie also asynchronisierte Methoden von einer C# WinRT -Komponente aufrufen? . Ich habe auch "WinRT/Windows.Foundation.h" aufgenommen. Dies wird aufgebaut, aber es fehlerhaft zur Laufzeit mit der entmutigenden (IMO) -Klasse, die nicht registriert ist. Es ist auch aus 2014.
Code: Select all
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Windows.Foundation;
namespace MyComp
{
public sealed class MyLib
{
public static string OtherMethods() // only working method
{
return "string";
}
// Below methods results with `Class not registered` error
public static IAsyncOperation TestAsync() // I think this is the problem
{
return TestAsyncHelper().AsAsyncOperation();
}
private static async Task TestAsyncHelper()
{
// do stuff here
return "string";
}
// ******* Update ****
public static IDictionary GetMapOfNames()
{
Dictionary retval = new Dictionary();
retval.Add(1, "one");
retval.Add(2, "two");
retval.Add(3, "three");
retval.Add(42, "forty-two");
retval.Add(100, "one hundred");
return retval;
}
}
}
< /code>
update < /h2>
Ich habe festgestellt, dass dies mit jedem WinRT -Typ geschieht, der nicht primitiv ist. Ich versuche, einen ilist
oder idictionary zu implementieren und auch nicht zu tun. Ich fand "über verwaltete Typen an die Windows -Laufzeit übergeben", was zu "zurückgegebenen verwalteten Typen aus Ihrer Komponente" führte, aber jeder Versuch, den ich ausprobiert habe, hat dazu geführt, dass die Klasse nicht registriert ist Fehler. In den verknüpften Artikeln wird erwähnt, dass beim Übergeben von .NET -Typen an die WinRT -Komponente als entsprechender WinRT -Typ auf der anderen Seite angezeigt wird, was so klingt, als ob es einfach funktionieren sollte. Ich habe auch versucht, IMAP zu verwenden, aber diese Fehler mit IMAP sind aufgrund der Schutzstufe unzugänglich. Ich habe den Beispielcode aktualisiert.