Xamarin.Essentials: MainThread
Mainthread sınıfı, uygulamaların yürütmenin ana iş parçacığında kod çalıştırmasına ve belirli bir kod bloğunun ana iş parçacığında çalışmakta olup olmadığını tespit etmesine olanak tanır.
Arka Plan
iOS, Android ve Evrensel Windows Platformu dahil çoğu işletim sistemi, kullanıcı arabirimiyle ilgili kod için tek iş parçacığı modeli kullanır. Bu model, tuş vuruşları ve dokunmatik giriş dahil olmak üzere Kullanıcı arabirimi olaylarını doğru şekilde serileştirmek için gereklidir. Bu iş parçacığı genellikle ana iş parçacığı veya 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ıştırılması gerekir.
Uygulamaların bazen bir yürütme iş parçacığında olay işleyicisini çağıran olayları kullanması gerekir. ( Xamarin.Essentials Sınıflar,,, AccelerometerCompassGyroscopeMagnetometer ve OrientationSensor hepsi daha hızlı bir şekilde kullanıldığında ikincil bir iş parçacığında bilgi döndürebilir.) Olay işleyicisinin Kullanıcı Arabirimi öğelerine erişmesi gerekiyorsa, bu kodu ana iş parçacığında çalıştırması gerekir. Mainthread sınıfı, uygulamanın bu kodu ana iş parçacığında çalıştırmasına izin verir.
başlarken
Bu API 'yi kullanmaya başlamak için, kitaplığın projelerinizde düzgün bir şekilde yüklendiğinden ve ayarlandığından emin olmak için Başlarken Kılavuzunu okuyun.
Ana Iş parçacığında kod çalıştırma
Sınıfınıza bir başvuru ekleyin Xamarin.Essentials :
using Xamarin.Essentials;
Ana iş parçacığında kod çalıştırmak için statik MainThread.BeginInvokeOnMainThread yöntemi çağırın. Bağımsız değişkeni Action , yalnızca 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
});
Ana iş parçacığında çalışması gereken kod için ayrı bir yöntem tanımlanması da mümkündür:
void MyMainThreadCode()
{
// Code to run on the main thread
}
Daha sonra bu yöntemi, metoduna başvurarak ana iş parçacığında çalıştırabilirsiniz BeginInvokeOnMainThread :
MainThread.BeginInvokeOnMainThread(MyMainThreadCode);
Not
Xamarin.Forms adlı bir yöntemi vardırDevice.BeginInvokeOnMainThread(Action) Bu, ile aynı şeyi yapar MainThread.BeginInvokeOnMainThread(Action) .
Bir uygulamada her iki yöntemi de kullanabilirsiniz; ancak, Xamarin.Forms çağıran kodun bağımlılık için başka bir ihtiyacı olup olmadığını göz önünde bulundurun Xamarin.Forms . Değilse, MainThread.BeginInvokeOnMainThread(Action) büyük olasılıkla daha iyi bir seçenektir.
Kodun ana Iş parçacığında çalışıp çalışmadığını belirleme
MainThreadSınıfı ayrıca bir uygulamanın, ana iş parçacığında belirli bir kod bloğunun çalışıp çalışmadığını belirlemesine izin verir. IsMainThreadÖzelliği, true özelliği çağıran kod ana iş parçacığında çalışıyorsa döndürür. Bir program, ana iş parçacığı veya ikincil bir iş parçacığı için farklı kod çalıştırmak üzere bu özelliği kullanabilir:
if (MainThread.IsMainThread)
{
// Code to run if this is the main thread
}
else
{
// Code to run if this is a secondary thread
}
Örneğin, aşağıdaki gibi, çağrılmadan önce ikincil bir iş parçacığında kodun çalışıp çalışmadığını denetlemeniz gerektiğine merak edebilirsiniz BeginInvokeOnMainThread :
if (MainThread.IsMainThread)
{
MyMainThreadCode();
}
else
{
MainThread.BeginInvokeOnMainThread(MyMainThreadCode);
}
Kod bloğu ana iş parçacığında zaten çalışıyorsa bu denetim performansının iyileştirebileceğini kuşkulu olabilirsiniz.
Ancak, bu denetim gerekli değildir. Kendi platform uygulamaları, BeginInvokeOnMainThread çağrının ana iş parçacığında yapılmış olup olmadığını denetler. Gerçekten gerekli olmadığında çağrdığınızda çok az performans cezası vardır BeginInvokeOnMainThread .
Ek Yöntemler
MainThreadSınıfı, static arka plan iş parçacıklarında Kullanıcı arabirimi öğeleriyle etkileşim kurmak için kullanılabilecek aşağıdaki ek yöntemleri içerir:
| Yöntem | Bağımsız değişkenler | Döndürülenler | Amaç |
|---|---|---|---|
InvokeOnMainThreadAsync<T> |
Func<T> |
Task<T> |
Func<T>Ana iş parçacığında bir çağırır ve tamamlanmasını bekler. |
InvokeOnMainThreadAsync |
Action |
Task |
ActionAna iş parçacığında bir çağırır ve tamamlanmasını bekler. |
InvokeOnMainThreadAsync<T> |
Func<Task<T>> |
Task<T> |
Func<Task<T>>Ana iş parçacığında bir çağırır ve tamamlanmasını bekler. |
InvokeOnMainThreadAsync |
Func<Task> |
Task |
Func<Task>Ana iş parçacığında bir çağırır ve tamamlanmasını bekler. |
GetMainThreadSynchronizationContextAsync |
Task<SynchronizationContext> |
SynchronizationContextAna iş parçacığı için öğesini döndürür. |
API
- Xamarin. Essentials /mainthread "Data-LinkType =" dış ">mainthread kaynak kodu
- MainThread API belgeleri