Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
C# masaüstü uygulaması geliştiricisi olarak, .NET çeşitli birlikte çalışabilirlik işlevlerini ve Windows Runtime (WinRT) COM birlikte çalışabilirlik arabirimlerini temsil eden C# birlikte çalışma sınıflarından yararlanabilirsiniz. Bunlar IWindowNative, IInitializeWithWindow, GetWindowIdFromWindow işlevini ve diğer birçok sınıfı temsil eden C# sınıflarını içerir.
Bu konuda, kullanılabilir C# birlikte çalışma sınıfları listelenir ve bunların nasıl kullanılacağı gösterilir. Konunun sonundaki Background bölümünde, .NET önceki sürümlerinde birlikte çalışma arabirimlerinin nasıl kullanıldığı ve değişikliğin neden yapıldığı açıklanmaktadır.
C# birlikte çalışma sınıflarını kullanmak için bir .NET masaüstü projesini yapılandırın.
Sonraki bölümde listelenen C# birlikte çalışma sınıfları (Available C# birlikte çalışma sınıfları) Windows App SDK kapsamında veya belirli bir Target Framework Moniker kullanılarak .NET'da kullanılabilir.
WinUI 3 C# masaüstü projesi
Visual Studio'de yeni bir WinUI project oluşturduğunuzda (bkz. İlk WinUI project oluşturma), project zaten yapılandırılmıştır ve tüm C# birlikte çalışma sınıflarını hemen kullanmaya başlayabilirsiniz.
Diğer C# masaüstü project türlerinde (WPF veya WinForms)
Windows Presentation Foundation (WPF) veya Windows Forms (WinForms) gibi diğer .NET masaüstü proje türleri için, C# birlikte çalışma sınıflarına erişmek amacıyla önce projenizi yapılandırmanız gerekir. Aşağıda listelenen ilk sınıf kümesi için Windows App SDK başvurmanız gerekir. İkinci küme için, Windows 10, sürüm 1809 veya sonraki sürümleri hedefleyen bir Target Framework Moniker yapılandırmanız gerekir:
C# .NET masaüstü project için project dosyasını açın.
.csprojdosyasında, belirli bir .NET ve Windows SDK sürümünü hedeflemek için TargetFramework öğesini değiştirin. Örneğin, aşağıdaki öğe Windows 10, sürüm 2004'i hedefleyen .NET 6 project için uygundur.<PropertyGroup> <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework> </PropertyGroup>
'ı kullanarak desteklenen diğer değerlerin listesi de dahil olmak üzere daha fazla bilgi için bkz.Hedef Çerçeve Tanımlayıcı Seçeneği.
Kullanılabilir C# birlikte çalışma sınıfları
Note
Aşağıdaki sınıflar .NET 6 SDK veya üzerini gerektirir.
Kullanılabilir C# birlikte çalışma sınıfları, altında yatan interop fonksiyonlarından veya WinRT COM interop arayüzlerinden eşlenerek aşağıda verilmiştir. Listelenen her sınıf, temel alınan birlikte çalışma API'sinin işlevini/yöntemlerini uygular ve parametreler ve dönüş değerleri için tür açısından güvenli sarmalayıcılar sağlar. Örneğin, Windows.ApplicationModel.DataTransfer.DragDrop.Core.DragDropManagerInterop.GetForWindow bir IntPtr pencere tutamacı (HWND) parametresi gerektirir ve bir CoreDragDropManager nesnesi döndürür. Aşağıdaki tüm C# birlikte çalışma sınıfları ve ilişkili yöntemler statiktir.
Windows App SDK parçası olarak kullanılabilir
Microsoft.UI.Win32Interop sınıfı aşağıdaki tabloda C# birlikte çalışma yöntemlerini uygular. Kod örneği için bkz. Uygulama pencerelerini yönetme.
| Interoperabilite işlevi | C# interop yöntemi |
|---|---|
| GetDisplayIdFromMonitor | (Microsoft.UI) DisplayId Win32Interop.GetDisplayIdFromMonitor(IntPtr hmonitor) |
| GetIconFromIconId | (Microsoft.UI) IntPtr Win32Interop.GetIconFromIconId(IconId iconId) |
| GetIconIdFromIcon | (Microsoft.UI) IconId Win32Interop.GetIconIdFromIcon(IntPtr hicon) |
| GetMonitorFromDisplayId | (Microsoft.UI) IntPtr Win32Interop.GetMonitorFromDisplayId(DisplayId displayId) |
| GetWindowFromWindowId | (Microsoft.UI) IntPtr Win32Interop.GetWindowFromWindowId(WindowId windowId) |
| GetWindowIdFromWindow | (Microsoft.UI) WindowId Win32Interop.GetWindowIdFromWindow(IntPtr hwnd) |
Target Framework Monikeri aracılığıyla kullanılabilir
| WinRT COM birlikte çalışma arabirimi | C# etkileşim sınıfı |
|---|---|
| IAccountsSettingsPaneInterop | (Windows.UI.ApplicationSettings) AccountsSettingsPaneInterop |
| IDisplayInformationStaticsInterop | TFM net6.0-windows10.0.22621.0 ve .NET 6.0.7 ile kullanıma sunulmuştur.(Windows.Graphics.Display) DisplayInformationInterop |
| IDragDropManagerInterop | (Windows.ApplicationModel.DataTransfer.DragDrop.Core) DragDropManagerInterop |
| IInitializeWithWindow | (WinRT.Interop) InitializeWithWindow |
| IInputPaneInterop | (Windows.UI.ViewManagement) InputPaneInterop |
| IPlayToManagerInterop | (Windows.Media.PlayTo) PlayToManagerInterop |
| IPrintManagerInterop | (Windows.Graphics.Printing) PrintManagerInterop |
| IRadialControllerConfigurationInterop | (Windows.UI.Input) RadialControllerConfigurationInterop |
| IRadialControllerIndependentInputSourceInterop | (Windows.UI.Input.Core) RadialControllerIndependentInputSourceInterop |
| IRadialControllerInterop | (Windows.UI.Input) RadialControllerInterop |
| ISpatialInteractionManagerInterop | (Windows.UI.Input.Spatial) SpatialInteractionManagerInterop |
| ISystemMediaTransportControlsInterop | (Windows.Media) SystemMediaTransportControlsInterop |
| IUIViewSettingsInterop | (Windows.UI.ViewManagement) UIViewSettingsInterop |
| IUserConsentVerifierInterop | (Windows.Security.Credentials.UI) UserConsentVerifierInterop |
| IWebAuthenticationCoreManagerInterop | (Windows.Security.Authentication.Web.Core) WebAuthenticationCoreManagerInterop |
| IWindowNative | Yalnızca WinUI (WinRT.Interop) WindowNative WPF ve WinForms alternatifleri için bkz. |
Kod örneği
Bu kod örneği, bir WinUI uygulamasında iki C# birlikte çalışma sınıfının nasıl kullanılacağını gösterir (bkz. İlk WinUI project oluşturma). Örnek senaryo, bir Windows.Storage.Pickers.FolderPicker görüntülemektir. Ancak seçiciyi bir masaüstü uygulamasında görüntülemeden önce sahip penceresinin tutamacı (HWND) ile başlatmak gerekir.
-
IWindowNative WinRT COM birlikte çalışma arabirimini kullanarak bir pencere tutamacını (HWND) alabilirsiniz. Ve (önceki bölümdeki tabloya baktığımızda) bu arabirim WinRT.Interop.WindowNative C# birlikte çalışma sınıfı tarafından temsil edilir. Burada nesne,
thisana pencere arka planı kod dosyasından bir Microsoft.UI.Xaml.Window nesnesine başvurudur. - Kullanıcı arabiriminin bir parçasını sahip penceresiyle başlatmak için IInitializeWithWindow WinRT COM birlikte çalışma arabirimini kullanırsınız. Ve bu arabirim WinRT.Interop.InitializeWithWindow C# birlikte çalışma sınıfı tarafından temsil edilir.
private async void myButton_Click(object sender, RoutedEventArgs e)
{
// Create a folder picker.
var folderPicker = new Windows.Storage.Pickers.FolderPicker();
// 1. Retrieve the window handle (HWND) of the current WinUI window.
var hWnd = WinRT.Interop.WindowNative.GetWindowHandle(this);
// 2. Initialize the folder picker with the window handle (HWND).
WinRT.Interop.InitializeWithWindow.Initialize(folderPicker, hWnd);
// Use the folder picker as usual.
folderPicker.FileTypeFilter.Add("*");
var folder = await folderPicker.PickSingleFolderAsync();
}
Ayrıca bkz. Bir pencere tutamacını (HWND) al ve CoreWindowbağlı olan WinRT UI nesnelerini görüntüle.
Background
.NET Framework ve .NET Core'un önceki sürümlerinde WinRT hakkında yerleşik bilgi vardı. Bu önceki sürümlerle, ComImport özniteliğiyle doğrudan C# dilinde bir birlikte çalışma arabirimi tanımlayabilir ve ardından doğrudan bu birlikte çalışma arabirimine yansıtılmış bir sınıf yayınlayabilirsiniz.
WinRT Windows'a özgü bir teknoloji olduğundan, .NET taşınabilirlik ve verimlilik hedeflerini desteklemek için WinRT projeksiyon desteğini C# derleyicisinden ve .NET çalışma zamanından kaldırdık ve C#/WinRT araç setine taşıdık (bkz. Built-in desteği .NET) kaldırılmıştır).
ComImport tekniği IUnknown tabanlı birlikte çalışma arabirimleri için çalışmaya devam ederken, artık WinRT ile birlikte çalışma için kullanılan IInspectable tabanlı arabirimler için çalışmaz.
Bu nedenle, .NET yerine bu konuda açıklanan C# birlikte çalışma sınıflarını kullanabilirsiniz.
Sorun giderme ve bilinen sorunlar
Şu anda C# birlikte çalışma sınıfları için bilinen bir sorun yoktur. Geri bildirim sağlamak veya diğer sorunları bildirmek için mevcut bir soruna geri bildiriminizi ekleyin veya WindowsAppSDK GitHub deposunda yeni bir sorun oluşturun.
İlgili konular
- İlk WinUI projenizi oluşturma
- Uygulama pencerelerini yönetme
- Pencere tanıtıcısını (HWND) al
- CoreWindow bağlı WinRT UI nesnelerini görüntüleme
Windows developer