.NET MAUI UI iş parçacığında iş parçacığı oluşturma
Bu makalede, ana kullanıcı arabirimi iş parçacığında kod çalıştırmak için .NET Çok Platformlu Uygulama Kullanıcı Arabirimi (.NET MAUI) MainThread sınıfını nasıl kullanabileceğiniz açıklanmaktadır. Çoğu işletim sistemi, kullanıcı arabirimini içeren kod için tek iş parçacıklı bir model kullanır. Bu model, tuş vuruşları ve dokunma girişi de dahil olmak üzere kullanıcı arabirimi olaylarını düzgün bir şekilde seri hale getirmek için gereklidir. Bu iş parçacığı genellikle ana iş parçacığı, kullanıcı arabirimi iş parçacığı veya ui iş parçacığı olarak adlandırılır. Bu modelin dezavantajı, kullanıcı arabirimi öğelerine erişen tüm kodların uygulamanın ana iş parçacığında çalışması gerektiğidir.
MainThread
sınıfı ad alanında Microsoft.Maui.ApplicationModel
kullanılabilir.
Ne zaman gereklidir?
Uygulamaların bazen veya Compass
algılayıcıları gibi ikincil bir iş parçacığında olay işleyicisini Accelerometer
çağıran olayları kullanması gerekir. Tüm algılayıcılar, daha hızlı algılama hızlarıyla kullanıldığında ikincil bir iş parçacığında bilgi döndürebilir. Olay işleyicisinin kullanıcı arabirimi öğelerine erişmesi gerekiyorsa, ana iş parçacığında kodu çağırması gerekir.
Ui iş parçacığında kod çalıştırma
Kodu ana iş parçacığında çalıştırmak için statik MainThread.BeginInvokeOnMainThread yöntemini çağırın. Bağımsız değişken, Action bağımsız değişken içermeyen ve dönüş değeri olmayan bir yöntem olan bir nesnedir:
MainThread.BeginInvokeOnMainThread(() =>
{
// Code to run on the main thread
});
Kod için ayrı bir yöntem tanımlamak ve ardından bu kodu yöntemiyle çağırmak BeginInvokeOnMainThread
da mümkündür:
void MyMainThreadCode()
{
// Code to run on the main thread
}
MainThread.BeginInvokeOnMainThread(MyMainThreadCode);
Çağırmanın gerekli olup olmadığını belirleme
sınıfıyla MainThread , geçerli kodun ana iş parçacığında çalışıp çalışmadığını belirleyebilirsiniz. MainThread.IsMainThread özelliği, özelliğini çağıran kod ana iş parçacığında çalışıyorsa ve false
çalışmıyorsa döndürürtrue
. çağırmadan MainThread.BeginInvokeOnMainThreadönce kodun ana iş parçacığında çalışıp çalışmadığını belirlemeniz gerektiğini varsaymak mantıklıdır. Örneğin aşağıdaki kod IsMainThread
, kodun ana iş parçacığında çalışıyor olması durumunda yönteminin MyMainThreadCode
doğrudan çağrılıp çağrılmadığını algılamak için kullanır. Ana iş parçacığında çalışmıyorsa yöntemi öğesine BeginInvokeOnMainThread
geçirilir:
if (MainThread.IsMainThread)
MyMainThreadCode();
else
MainThread.BeginInvokeOnMainThread(MyMainThreadCode);
Bu denetim gerekli değildir. BeginInvokeOnMainThread
geçerli kodun ana iş parçacığında çalışıp çalışmadığını test eder. Kod ana iş parçacığında çalışıyorsa, BeginInvokeOnMainThread
sağlanan yöntemi doğrudan çağırır. Kod ikincil bir iş parçacığında çalışıyorsa, BeginInvokeOnMainThread
ana iş parçacığında sağlanan yöntemi çağırır. Bu nedenle, çalıştırdığınız kod ana veya ikincil iş parçacığından bağımsız olarak aynıysa, gerekli olup olmadığını denetlemeden çağrısı BeginInvokeOnMainThread
yapmanız yeterlidir. Bunu yaparken göz ardı edilebilir bir ek yük vardır.
Özelliğini denetlemeniz IsMainThread
gereken tek neden, iş parçacığına göre farklı bir şey yapacak dallanma mantığınız olmasıdır.
Ek yöntemler
sınıfı, MainThread arka plan iş parçacıklarından kullanıcı arabirimi öğeleriyle etkileşime geçmek için kullanılabilecek aşağıdaki ek static
yöntemleri içerir:
Metot | Bağımsız değişkenler | İadeler | Amaç |
---|---|---|---|
InvokeOnMainThreadAsync<T> |
Func<T> |
Task<T> |
Ana iş parçacığında bir Func<T> çağırır ve tamamlanmasını bekler. |
InvokeOnMainThreadAsync |
Action |
Task |
Ana iş parçacığında bir Action çağırır ve tamamlanmasını bekler. |
InvokeOnMainThreadAsync<T> |
Func<Task<T>> |
Task<T> |
Ana iş parçacığında bir Func<Task<T>> çağırır ve tamamlanmasını bekler. |
InvokeOnMainThreadAsync |
Func<Task> |
Task |
Ana iş parçacığında bir Func<Task> çağırır ve tamamlanmasını bekler. |
GetMainThreadSynchronizationContextAsync |
Task<SynchronizationContext> |
Ana iş parçacığı için değerini SynchronizationContext döndürür. |