.NET 6學習筆記(4)——如何在.NET 6的Desktop App中使用Windows Runtime API
Windows Runtime API是當初某軟為了區別Win32 API,力挺UWP而創建的另一套Windows 10專用的API集合。後來因為一些原因,UWP沒火。為了不埋沒很有價值的Windows Runtime API,某軟只好允許.NET Framework的程式調用Windows Runtime API,我們在《遷移桌面程式到MS Store(4)——桌面程式調用Win10 API》中討論過。
而從.NET 5開始,新.NET中Desktop App調用WinRT runtime的方式又發生了變化。總體來說更簡單了,今天我們就一起來實踐一番。
首先我們創建一個新的Console工程。Framework選擇.NET 6。除了學習性質的個人項目,否則我只推薦Long-term support的版本,商業性質的項目發布出去以後,突然對應版本的.NET Runtime官方支援周期到了,是比較滑稽的。
在這樣一個Console的程式中,我打算訪問一個常見的WinRT API:Windows.Devices.Raidos命名空間下的Radio類。當然我們也可以通過Win32 API去操作藍牙,可如果僅希望開、關和查詢藍牙狀態這樣的簡單操作,Win32 API就顯得有些蛋疼了。
而Radio類對.NET 程式而言,就顯得友好許多。首先讓我們右鍵編輯project文件。
將默認的:
<TargetFramework>net6.0</TargetFramework>
更改為對應具體Windows SDK版本:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net6.0-windows10.0.22000.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup> </Project>
其中SDK版本的對應關係如下:
• net6.0-windows10.0.17763.0: 對應 Windows 10, version 1809.
• net6.0-windows10.0.18362.0: 對應 Windows 10, version 1903.
• net6.0-windows10.0.19041.0: 對應 Windows 10, version 2004.
• net6.0-windows10.0.22000.0: 對應 Windows 11.
完成這一步之後,即可像UWP程式里一樣,通過using添Windows.Devices.Raidos命名空間,來直接使用WinRT API了。
using Windows.Devices.Radios; // See //aka.ms/new-console-template for more information Console.WriteLine("Hello, World!"); foreach (var radio in await Radio.GetRadiosAsync()) { Console.WriteLine($"Name:{radio.Name}, Kind:{radio.Kind}, State:{radio.State}"); } Console.ReadLine();
是不是又一次覺得啊軟這回能Make desktop great again!這個現在還不好說,但學習一下如何開發現代化的Desktop App總不是壞事。
附上Github鏈接:
manupstairs/WinRTApiInNet6: Introduce how to use WinRT API in .NET 6 project. (github.com)
以下鏈接,是MS Learn上Windows開發的入門課程,單個課程三十分鐘到60分鐘不等,想要補充基礎知識的同學點這裡:
開始使用 Visual Studio 開發 Windows 10 應用