p

Yeni Visual Studio Uygulama Paketleme Projesi'ni kullanarak masaüstü uygulamanızı Windows 10 özellikleriyle genişletme


Visual Studio 2017 15.4, yeni Windows 10 Uygulama Dağıtım Yığını'nı kullanarak uygulamanızı modernleştirmenize yardımcı olacak yeni Windows Uygulama Paketleme projesini tanıttı.

Önceki gönderimizde bunun hakkında konuşmuştuk: Visual Studio 2017 Update 4, uygulamanızı modernleştirmeyi ve depolamayı hazır hale getirmenizi kolaylaştırır ve bugün Visual Studio 2017 15.5'te uygulamalarınızdaki daha fazla Windows 10 özelliğinden yararlanmak için Windows uygulama paketleme projesine yeni senaryolar sağlayan yeni özellikleri açıklamak istiyoruz.
Bu makale sırasında, yalnızca Win32 uygulamaları için değil, aynı zamanda UWP uygulamaları ve bileşenleri için paketlemeyi etkinleştirmek için paketleme projesine eklenen yeni yetenekleri vurgulamak için üç örneği ele alacağız:
  1. UWP arka plan görevleri kullanılarak arka plan yürütme.
  2. Hedef Paylaş sözleşmesini kullanarak Windows Kabuğu tümleştirmesi.
  3. Win32 kod yatırımlarını UWP uygulama paketinize ekleyin.
İlk iki örnek, UWP bileşenleri olarak uygulanan genişletilmiş işlevselliğe sahip APPX olarak paketlenmiş mevcut WPF uygulamalarıdır. İlk uygulama UWP arka plan görevlerine göre arka plan yürütme eklerken, ikinci uygulama, Share sözleşmeleri olarak yaygın olarak kullanılabilen bir özelliği kullanarak uygulamanın Windows 10 kabuğuyla nasıl derinlemesine entegreılacağını gösterir. Son olarak, son uygulama, Excel ile birlikte gelen klasik bir Win32 işlemine çağıran bir UWP giriş noktasıdır.
Not: UWP bileşenlerinin belirli bir platform için derlenilmesi gerekeceğinden: x86 veya x64, Herhangi bir CPU çözümü yapılandırması bu örneklerin hiçbirinde çalışmaz.
Tüm örnekler GitHub repo Windows-Packaging-Samples'da mevcuttur. Bu örnekler, https://www.visualstudio.com/downloads'danindirilebilen Visual Studio 2017 15.5 Preview 4 veya daha yenisini gerektirir.

1. Arka Plan Görevleri ile WPF

Evrensel Windows Platformu, gelişmiş arka plan işleme desteği içerir. Arka plan görevleri, uygulama askıya alındığında bile kod çalıştıra izin verir. Arka plan görevleri, posta indirme, gelen sohbet iletisi için tost bildirimi gösterme veya sistem durumundaki bir değişikliğe tepki verme gibi kullanıcı etkileşimi gerektirmeyen küçük iş öğeleri için tasarlanmıştır.
Bu özelliğin Win32 uygulamalarınızdan nasıl kullanılacağını göstermek için, kullanıcı tarafından yapılandırılan bir URL'ye HTTP isteğinde bulunan ve geçen milisaniyeleri bir Tost Bildirimi'nde gösterecek küçük bir yardımcı program uygulayacağız.
Kullanıcının arka plan görevini denetlemek ve etkinleştirmek/devre dışı bırakmak için URL'yi belirtmesine izin vermek için bir WPF uygulaması oluşturacağız. Arka plan görevi Bir Windows Çalışma Zamanı Bileşeni (WINMD) olarak uygulanacaktır. Bu bileşeni pakete ekleyebilmek için, bileşeni kullanan bir UWP uygulaması oluşturmamız ve son olarak WPF ve UWP projelerini paketleme projesine başvuru olarak eklememiz gerekir. Aşağıda gerekli adımların listesi verilmiştir.
Bu örneğin tam kaynak kodunu GitHub deposundabulabilirsiniz, ancak örneği sıfırdan oluşturmak istiyorsanız, en önemli adımlar şunlardır.
  1. Masaüstü uygulamanızı paketleme projesini kullanarak paketleme
  2. Arka plan görevini uygulamak için Windows Çalışma Zamanı bileşeni ekleme
  3. Çalışma zamanı bileşenine başvuran bir UWP uygulaması ekleme
  4. Paketleme projesinden UWP uygulamasına başvuru ekleme
  5. Bildirimde Arka Plan görevini yapılandırma
  6. Arka plan görevini Masaüstü uygulamasından kaydetme
1 ile 4 arasında olan adımları tamamladıktan sonra, aşağıdaki resimde gösterildiği gibi projeler için bir çözümün olmalıdır:
Paketleme projesi yalnızca WPF uygulamasına değil, aynı zamanda UWP projesine de başvurur. Bu nedenle, UWP Herhangi bir CPU yapılandırması için kullanılamadığından, çözümün belirli bir platform için yapılandırılması gerekir.

Arka Plan Görevi uygulaması

Arka plan görevi, IBackgroundTask arabirimini uygulayan bir C# sınıfıdır. Bu arabirim, sistem görevi tetiklediğinde çağrılacak Run yöntemini tanımlar.
[kod lang="csharp"]
ortak mühürlü sınıf SiteVerifier :

IBackgroundTask {

ortak zaman uyumsuz boşluk Run(IBackgroundTaskInstance taskInstance)

{

taskInstance.Canceled += TaskInstance_Canceled;
BackgroundTaskDeferral erteleme = taskInstance.GetDeferral();
var msg = MeasureRequestTime();
ShowToast(msg);
deferral.Complete();

}

private async Task<string>

MeasureRequestTime() {

string msg;



try

{ var url = ApplicationData.Current.LocalSettings.Values["UrlToVerify"] dize olarak;

var

http = yeni HttpClient(); Kronometre saati = Stopwatch.StartNew();
var yanıtı = http'nin GetAsync(yeni Uri(url));
yanıtını bular. EnsureSuccessStatusCode();
var geçti = saat. ElapsedMilliseconds;
saat. Dur();
msg = $"{url} alındı {geçti. ToString()} ms";
}

catch (Özel



durum ex) { msg = ex. Mesaj;
}

dönüş msg;

}

[/kod]
WPF uygulaması ile UWP arka plan görevi arasında bilgi paylaşmak için ApplicationData'daki LocalSettings'i nasıl kullandığımızı unutmayın.
Arka plan görevini yapılandırmak için, bildirim tasarımcısını kullanarak bildirimi güncelleştirmeniz gerekir. Bildirimler sekmesine gidin, arka plan görevini ekleyin ve giriş noktasını uygulama olarak yapılandırın.
Arka plan görevini sisteme kaydetmek için WPF uygulamasından bir Windows 10 API'si çağırmamız gerekir. Bu API Windows 10 SDK'da mevcuttur ve .NET'ten kullanmak için buradaaçıklanan başvuruları eklememiz gerekir. Windows 10 API'sine eriştikten sonra, arka plan görevini aşağıdaki kodda gösterildiği gibi yapılandırmak için BackgroundTaskRegistration sınıfını kullanabilirsiniz:
[kod lang="csharp"]
public void RegisterBackgroundTask(String

triggerName) {

var current = BackgroundTaskRegistration.AllTasks

. Where(b => b.Value.Name == triggerName). FirstOrDefault(). Değer;

if (current is



null) { BackgroundTaskBuilder builder =

yeni BackgroundTaskBuilder(); builder. Ad = triggerName;
inşaatçı. SetTrigger(yeni MaintenanceTrigger(15, yanlış));
inşaatçı. TaskEntryPoint = "httpPing.siteVerifier";
inşaatçı. Kayıt ol();
System.Diagnostics.Debug.WriteLine("BGTask kayıtlı:" + triggerName);
}



else

{ System.Diagnostics.Debug.WriteLine("Görev zaten:" + triggerName);

}
}

[/kod]
Arka plan görevini kaydetmek için, önce görevin daha önce kaydedilmediğinden emin oluyoruz ve daha sonra adı ve Tetikleyici'yi yapılandırmak için BackgroundTaskBuilder'ı kullanıyoruz, bu durumda MainteinanceTrigger.

2. Başvurunuzu Paylaşım Hedefi olarak kaydedin

Sözleşmeleri paylaşma, gönderen ve alıcı olmak üzere iki uygulama arasında bilgi paylaşımına izin veren bir Windows 10 özelliğidir. Masaüstü Köprüsü sayesinde, bir UWP uygulamasını Share alıcısı olarak kaydedebilir ve ardından bir Win32 uygulamasıyla entegre edebiliriz. Uygulama kaydedildikten sonra, kullanıcı aşağıda gösterildiği gibi bir paylaşım işlemini her çağırdığında gösterilecektir:
Bu örnekte, kullanıcıların Fotoğraflar uygulaması, Edge ve hatta Shell gibi diğer uygulamalardan uygulamamıza resim gönderebilecekleri bir paylaşım hedefi olmak için bir WPF uygulamasını genişletiyoruz. Paketleme projesini yalnızca WPF uygulamasını değil, aynı zamanda bir UWP UI'nin paylaşım hedefinden olay almasına izin veren bir UWP uygulamasını da içerecek şekilde kullanıyoruz. Aşağıda, WPF ve UWP projelerine başvuran paketleme projesine sahip çözüm gezginini görebilirsiniz.
Paketin, UWP uygulamasının adı da dahil olmak üzere Paylaşım Hedefini bildirmesi gerekir:
Uygulama etkinleştirildiğinde, aşağıdaki kod snippet'inde gösterildiği gibi ShareOperation parametresinden paylaşım hedefi bilgilerini alır:
[kod lang="csharp"]
korumalı zaman uyumsuz geçersiz kılma geçersiz kılma OnNavigatedTo(NavigationEventArgs e)

{

base. OnNavigatedTo(e);
işlem = (ShareOperation)e.Parameter;
eğer (işlem. Data.Contains(StandardDataFormats.StorageItems))



{ var öğeleri = işlemi bekliyor. Data.GetStorageItemsAsync();
dosya = öğeler[0] olarak StorageFile;
IRandomAccessStreamWithContentType akışı = dosyayı bekle. OpenReadAsync();

Bunu bekle. Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>



{ BitmapImage image = yeni BitmapImage();

this.img.Source = image;

await image. SetSourceAsync(akış);

});
}
}

[/kod]
Artık kullanıcı bir resmi her paylaştığında ve uygulamamızı seçtiğinde, Paylaşım Kullanıcı Arabirimi uygulaması çağrılır ve UWP kullanıcı arabirimi görüntülenir.

Diğer Haberler