Xamarin.Forms MessagingCenter

Örneği İndir Örneği indirme

Yayımla-abone ol düzeni, yayımcıların abone olarak bilinen herhangi bir alıcı bilgisi olmadan ileti gönderdiği bir mesajlaşma düzenidir. Benzer şekilde, aboneler herhangi bir yayımcı bilgisi olmadan belirli iletileri dinler.

.NET'te olaylar yayımla-abone ol desenini benimser ve denetim ve bunu içeren sayfa gibi gevşek bağlantı gerekli olmaysa bileşenler arasındaki iletişim katmanı için en basit ve kolay yaklaşımdır. Ancak, yayımcı ve abone ömürleri, nesne başvuruları ile birbirine bağlı olur ve abone türünün yayımcı türüne bir başvurusu olması gerekir. Bu, özellikle statik veya uzun süreli bir nesnenin olayına abone olan kısa süreli nesneler olduğunda bellek yönetimi sorunları oluşturabilir. Olay işleyicisi kaldırılamazsa, abone yayımcıda ona başvuruyla canlı tutulur ve bu durum abonenin çöp toplamasını önler veya geciktirer.

sınıfı, nesne ve tür başvurularına göre bağlantı kuracak kadar kolay olmayan bileşenler arasında ileti tabanlı iletişime izin Xamarin.FormsMessagingCenter vererek yayımlama-abone olma desenini uygulamaya alır. Bu mekanizma, yayımcıların ve abonelerin bir başvuru olmadan iletişim kurmasına olanak sağlar ve aralarındaki bağımlılıkları azaltmaya yardımcı olur.

sınıfı MessagingCenter çok noktaya yayın-abone olma işlevi sağlar. Bu, tek bir ileti yayımlayan birden çok yayımcının ve aynı iletiyi dinleyen birden çok abonenin olduğu anlamına gelir:

Çok noktaya yayın-abone olma işlevi

Yayımcılar yöntemini kullanarak ileti MessagingCenter.Send gönderirken aboneler yöntemini kullanarak iletileri MessagingCenter.Subscribe dinler. Ayrıca aboneler gerekirse yöntemiyle ileti aboneliklerinden de abonelikten MessagingCenter.Unsubscribe çıkabilirsiniz.

Önemli

Dahili olarak, MessagingCenter sınıfı zayıf başvurular kullanır. Bu, nesneleri canlı tutmayacak ve atık toplamaya izin verecek anlamına gelir. Bu nedenle, yalnızca bir sınıf artık iletiyi almak istediği zaman iletinin aboneliğini iptal etmek gerekir.

İleti yayımlama

MessagingCenter iletileri dizedir. Yayımcılar, abonelere aşırı yüklemelerden birini bildiren bir MessagingCenter.Send ileti olduğunu bildirer. Aşağıdaki kod örneği bir ileti Hi yayımlar:

MessagingCenter.Send<MainPage>(this, "Hi");

Bu örnekte Send yöntemi, göndereni temsil eden genel bir bağımsız değişken belirtir. İletiyi almak için abonenin aynı genel bağımsız değişkeni belirtmesi ve bu gönderenden gelen bir iletiyi dinlediğini belirtmesi gerekir. Ayrıca, bu örnek iki yöntem bağımsız değişkeni belirtir:

  • İlk bağımsız değişken gönderen örneğini belirtir.
  • İkinci bağımsız değişken iletiyi belirtir.

Yük verileri bir iletiyle de gönderebilirsiniz:

MessagingCenter.Send<MainPage, string>(this, "Hi", "John");

Bu örnekte yöntemi Send iki genel bağımsız değişken belirtir. Birincisi, iletiyi gönderen tür, ikincisi ise gönderilen yük verisi t t tür. İletiyi almak için abonenin aynı genel bağımsız değişkenleri de belirtmesi gerekir. Bu, bir ileti kimliğini paylaşarak farklı aboneler tarafından farklı yük veri türleri gönderilen birden çok iletiye olanak sağlar. Ayrıca, bu örnek aboneye gönderilecek yük verilerini temsil eden üçüncü bir yöntem bağımsız değişken belirtir. Bu durumda yük verileri bir string olur.

yöntemi, Send bir fire-and-forget yaklaşımını kullanarak iletiyi ve tüm yük verilerini yayımlar. Bu nedenle, iletiyi almak için kayıtlı aboneler olsa bile ileti gönderilir. Bu durumda gönderilen ileti yoksayılır.

İletiye abone olma

Aboneler, aşırı yüklemelerden birini kullanarak ileti almak MessagingCenter.Subscribe için kaydolabilirsiniz. Aşağıdaki kod örneği bunun bir örneğini gösterir:

MessagingCenter.Subscribe<MainPage> (this, "Hi", (sender) =>
{
    // Do something whenever the "Hi" message is received
});

Bu örnekte yöntemi, nesnesini türü tarafından gönderilen iletilere abone olur ve iletiyi almaya yanıt olarak bir geri Subscribethis çağırma temsilcisi HiMainPage yürütür. Lambda ifadesi olarak belirtilen geri çağırma temsilcisi, kullanıcı arabirimini güncelleştirme, bazı verileri kaydeden veya başka bir işlemi tetikleyen kod olabilir.

Not

Abonenin yayımlanan bir iletinin her örneğini işlemesi gerekmebilir ve bu yöntemde belirtilen genel tür bağımsız değişkenleri tarafından Subscribe denetlenebilir.

Aşağıdaki örnekte yük verileri içeren bir iletiye nasıl abone olun olduğu gösterir:

MessagingCenter.Subscribe<MainPage, string>(this, "Hi", async (sender, arg) =>
{
    await DisplayAlert("Message received", "arg=" + arg, "OK");
});

Bu örnekte yöntemi, yük verileri bir olan türü SubscribeHi tarafından gönderilen MainPage iletilere abone string olur. Böyle bir ileti almaya yanıt olarak, yük verilerini bir uyarıda görüntüleyen bir geri çağırma temsilcisi yürütülür.

Önemli

yöntemi tarafından yürütülen temsilci, yöntemi kullanılarak iletiyi yayımlayan aynı iş Subscribe parçacığında Send yürütülür.

İleti aboneliğini iptal

Aboneler artık almak istemedikleri iletilerin aboneliğini kaldırabilirsiniz. Bu, aşırı yüklemelerden biri ile MessagingCenter.Unsubscribe elde edilir:

MessagingCenter.Unsubscribe<MainPage>(this, "Hi");

Bu örnekte Unsubscribe yöntemi, türü tarafından gönderilen this iletiden Hi nesnesinin aboneliğini MainPage kaldırıyor.

Yük verilerini içeren iletilerin aboneliğinin iki genel bağımsız değişken Unsubscribe belirten aşırı yükleme kullanılarak aboneliğinin iptali gerekir:

MessagingCenter.Unsubscribe<MainPage, string>(this, "Hi");

Bu örnekte yöntemi, yük verileri bir olan türü tarafından gönderilen UnsubscribethisHiMainPage iletiden nesnesinin aboneliğini string kaldırıyor.