Mürekkep İş Parçacığı Modeli
Bir tablet PC 'deki mürekkebin avantajlarından biri, düzenli bir kalemle ve kağıtla yazma gibi çok büyük bir şey olmasını sağlar. Bunu gerçekleştirmek için, tablet kalemi bir fareden çok daha yüksek bir hızda giriş verilerini toplar ve Kullanıcı yazarken mürekkebi işler. Uygulamanın kullanıcı arabirimi (UI) iş parçacığı, engellenen hale gelebileceğinden kalem verileri toplama ve mürekkep işleme için yeterli değildir. Bunu çözümlemek için bir WPF uygulama, kullanıcı mürekkep yazdığında iki ek iş parçacığı kullanır.
Aşağıdaki listede dijital mürekkebin toplanması ve işlenmesi bölümünde yer alan iş parçacıkları açıklanmaktadır:
Kalem iş parçacığı-ekran kaleminden giriş alan iş parçacığı. (Gerçekte bu bir iş parçacığı havuzudur, ancak bu konu, bir kalem iş parçacığı olarak ifade edilir.)
Uygulama kullanıcı arabirimi iş parçacığı-uygulamanın kullanıcı arabirimini denetleyen iş parçacığı.
Dinamik işleme iş parçacığı-kullanıcı bir vuruş çizirken mürekkebi işleyen iş parçacığı. Dinamik işleme iş parçacığı, Windows Presentation Foundation Iş parçacığı modelindebahsedildiği gibi, uygulama için diğer kullanıcı arabirimi öğelerini işleyen iş parçacığından farklıdır.
Mürekkep oluşturma modeli, uygulamanın bir InkCanvas mürekkep girişi denetimi oluştururkenolduğu gibi, veya özel bir denetim kullanıp kullanmasıdır. Bu konu, iş parçacığı iş parçacığı açısından ele alınmaktadır, ancak InkCanvas özel bir denetim oluşturduğunuzda aynı kavramlar geçerlidir.
İş parçacığına genel bakış
Aşağıdaki diyagramda, bir Kullanıcı bir vuruş çizdiğinde iş parçacığı modeli gösterilmektedir:

Kullanıcı vuruşu çizirken gerçekleşen eylemler
Kullanıcı bir vuruş çizdiğinde, ekran kalemi noktaları kalem iş parçacığı üzerinde gelir. Ekran kalemi eklentileri dahil, DynamicRenderer Kalem iş parçacığındaki ekran kalemi noktalarını kabul eder ve bunları almadan önce bunları değiştirme şansına sahip olur InkCanvas .
, DynamicRenderer Dinamik işleme iş parçacığında ekran kalemi noktalarını işler. Bu, önceki adımla aynı anda gerçekleşir.
, InkCanvas UI iş parçacığında ekran kalemi noktalarını alır.
Kullanıcı vuruşu sona erdikten sonra gerçekleşen eylemler
Kullanıcı vuruşu çizmeyi bitirdiğinde, InkCanvas bir Stroke nesnesi oluşturur ve onu statik olarak işleyen öğesine ekler InkPresenter .
UI iş parçacığı, DynamicRenderer konturun statik olarak işlenmiş olduğunu uyarır, bu nedenle DynamicRenderer konturun görsel temsilini kaldırır.
Mürekkep toplama ve ekran kalemi eklentileri
Her birinin UIElement bir öğesine sahip StylusPlugInCollection . StylusPlugInAlma içindeki nesneler, StylusPlugInCollection Kalem iş parçacığındaki ekran kalemi noktalarını değiştirebilir. StylusPlugInNesneler, ekran kalemi noktalarını içindeki sıralarına göre alır StylusPlugInCollection .
Aşağıdaki diyagramda, bir koleksiyonun içerdiği kuramsal durum, StylusPlugIns UIElement stylusPlugin1 bir DynamicRenderer , ve stylusPlugin2 , bu sırayla gösterilmektedir.

Önceki diyagramda aşağıdaki davranış gerçekleşir:
StylusPlugin1x ve y değerlerini değiştirir.DynamicRenderer değiştirilen ekran kalemi noktalarını alır ve bunları dinamik işleme iş parçacığında işler.
StylusPlugin2değiştirilen ekran kalemi noktalarını alır ve x ve y değerlerini daha fazla değiştirir.Uygulama, ekran kalemi noktalarını toplar ve Kullanıcı vuruşu bitirdiğinde, konturu statik olarak işler.
stylusPlugin1Ekran kalemi bir dikdörtgene işaret ettiğini kısıtladığını ve stylusPlugin2 ekran kalemi noktalarını sağa çevirdiğini varsayalım. Önceki senaryoda, DynamicRenderer çevrilmiş ekran kalemi noktalarını değil, kısıtlı ekran kalemi noktalarını alır. Kullanıcı vuruşu çizdiğinde, vuruş dikdörtgenin sınırları içinde işlenir, ancak vuruş Kullanıcı kalemi yapana kadar çevrilmez.
UI iş parçacığında bir ekran kalemi eklentisi ile işlem gerçekleştirme
Kalem iş parçacığında doğru isabet testi gerçekleştirilemediği için bazı öğeler bazen diğer öğeler için tasarlanan Stilus girişi alabilir. Bir işlem gerçekleştirmeden önce girişin doğru şekilde yönlendirildiğinden emin olmanız gerekiyorsa, ' a abone olun ve OnStylusDownProcessed , OnStylusMoveProcessed veya yönteminde işlemi gerçekleştirin OnStylusUpProcessed . Bu yöntemler, doğru isabet testi gerçekleştirildikten sonra uygulama iş parçacığı tarafından çağrılır. Bu yöntemlere abone olmak için, NotifyWhenProcessed Kalem iş parçacığında oluşan yöntemdeki yöntemi çağırın.
Aşağıdaki diyagramda kalem iş parçacığı ile UI iş parçacığı arasındaki ilişki, a 'nın ekran kalemi olaylarına göre gösterilmektedir StylusPlugIn .

Mürekkep işleme
Kullanıcı bir vuruş çizdiğinde, mürekkebi DynamicRenderer ayrı bir iş parçacığında işler, böylece kanal, Kullanıcı arabirimi iş parçacığı meşgul olduğunda bile kalemden "Flow" olarak görünür. , DynamicRenderer Ekran kalemi noktalarını toplarken dinamik işleme iş parçacığında görsel bir ağaç oluşturur. Kullanıcı vuruşu bitirdiğinde, DynamicRenderer uygulama bir sonraki işleme geçişini yaparken bildirim ister. Uygulama sonraki işleme geçişini tamamladıktan sonra, DynamicRenderer kendi görsel ağacını temizler. Aşağıdaki diyagramda bu işlem gösterilmektedir.

Kullanıcı vuruşu başlatır.
- DynamicRendererGörsel ağacı oluşturur.
Kullanıcı vuruşu çiziyorken.
- DynamicRendererGörsel ağacı oluşturur.
Kullanıcı vuruşu sonlandırır.
, InkPresenter Konturu görsel ağacına ekler.
Medya Tümleştirme Katmanı (MIL), konturları statik olarak işler.
DynamicRendererGörselleri temizler.