zurück zum Artikel

WinRT in "klassischen" .NET-Anwendungen nutzen

Dr. Holger Schwichtenberg

Die neue COM-basierte Windows Runtime Library kann man nicht nur in den Metro-Anwendungen von Windows 8, sondern auch in "klassischen" Desktop-Anwendungen nutzen.

Die neue COM-basierte Windows Runtime [1](WinRT) [2] Library [3]kann man nicht nur in den Windows 8-Metro [4]-Anwendungen, sondern auch in "klassischen", mit .NET geschriebenen Desktop-Anwendungen nutzen. Allerdings laufen dann solche Anwendungen nur unter Windows 8 – insofern nicht Microsoft seine Meinung noch mal ändert und WinRT doch auch für ältere Betriebssysteme anbietet.

Das folgende Beispiel zeigt eine Dateisuche mit Windows (Desktop) Search, implementiert in .NET 4.5 [5] mit C# 5.0 und unter Verwendung von zwei WinRT-Komponenten: Windows.Storage.dll und Windows.Storage.Search.dll.

Im "Add Reference"-Dialog der Visual Studio 11 Developer Preview wird man keine WinRT-Komponenten finden. Um eine Referenz auf WinRT-Komponenten zu setzen, referenziert man derzeit die .winmd-Dateien [6] in c:\Windows\System32\WindowsMetadata. Wie die meisten WinRT-Funktionen ist auch diese Funktion nur durch eine asynchrone Operation ausführbar.

static void Main(string[] args)
{
Console.WriteLine("Starte");
DateiSuchDemo();
Console.WriteLine("Warte");
while (true) { Console.Write("."); System.Threading.Thread.Sleep(1000); }
}

/// <summary>
/// Suche ausführen mit Windows Search auf Basis der WinRT-Bibliothek
/// Windows.Storage.Search.dll
/// Auch eine Referenz auf Windows.Storage.dll wird benötigt.
/// </summary>
private static void DateiSuchDemo()
{
// Suche definieren
var docs = Windows.Storage.KnownFolders.DocumentsLibrary;
var queryOptions = new Windows.Storage.Search.QueryOptions();
queryOptions.FolderDepth = Windows.Storage.Search.FolderDepth.Deep;
queryOptions.IndexerOption = Windows.Storage.Search.
IndexerOption.UseIndexerWhenAvailable;
queryOptions.UserSearchFilter = "'iX Magazin'";
// Suche starten
var query = docs.CreateFileQueryWithOptions(queryOptions);
var aktion = query.GetFilesAsync();
aktion.Completed += DateiSucheFertig;
aktion.Start();
Console.WriteLine("Suche beginnt..");
}

/// <summary>
/// Suchergebnisse empfangen und ausgeben
/// </summary>
private static void DateiSucheFertig
(IAsyncOperation<IReadOnlyList<IStorageFile>> r)
{
Console.WriteLine("SearchCompleted/Status: " + r.Status);
if (r.Status != AsyncStatus.Error)
{
Console.WriteLine("Gefundene Dateien: " + r.GetResults().Count);
foreach (var f in r.GetResults())
{
Console.WriteLine(f.FileName);
}
}
} ( [7])

URL dieses Artikels:
https://www.heise.de/-1366039

Links in diesem Artikel:
[1] http://www.winrt.de
[2] http://www.winrt.de
[3] http://www.winrt.de
[4] http://www.it-visions.de/Lex/3535.aspx
[5] http://www.it-visions.de/Lex/6250.aspx
[6] http://www.it-visions.de/Lex/6261.aspx
[7] mailto:hs@ix.de