olarak bildiğim kadarıyla tüm olay aboneleri (aynı zamanda varsayılan) ThreadOption.PublisherThread
seçeneği kullanıyorsanız, olay eşzamanlı gerçekleştirilen ve aboneler EventArgs
nesneyi değiştirebilir, böylece yayıncı içinde olabilir
myEventAggregator.GetEvent<MyEvent>().Publish(myParams)
if (myParams.MyProperty)
{
// Do something
}
abone kodu şu şekilde görünecektir:
// Either of these is fine.
myEventAggregator.GetEvent<MyEvent>().Subscribe(MySubscribedMethod)
myEventAggregator.GetEvent<MyEvent>().Subscribe(MySubscribedMethod, ThreadOption.PublisherThread)
private void MySubscribedMethod(MyEventArgs e)
{
// Modify event args
e.MyProperty = true;
}
olay her zaman eşzamanlı olarak adlandırılan gerektiğini biliyorsanız, kendi tabanı clas oluşturabilir Subscribe
yöntemini geçersiz kılan ve yalnızca abonelerin ThreadOption.PublisherThread
seçeneğini kullanmasına izin veren olaylar için (CompositePresentationEvent<T>
yerine). Böyle bir şey olacaktır:
public class SynchronousEvent<TPayload> : CompositePresentationEvent<TPayload>
{
public override SubscriptionToken Subscribe(Action<TPayload> action, ThreadOption threadOption, bool keepSubscriberReferenceAlive, Predicate<TPayload> filter)
{
// Don't allow subscribers to use any option other than the PublisherThread option.
if (threadOption != ThreadOption.PublisherThread)
{
throw new InvalidOperationException();
}
// Perform the subscription.
return base.Subscribe(action, threadOption, keepSubscriberReferenceAlive, filter);
}
}
sonra yerine CompositePresentationEvent
den MyEvent
türetmek yerine, olay eşzamanlı olarak adlandırılan olacağını size garanti edecek ve modifiye EventArgs
alacak, SynchronousEvent
onu türetmek.
Cevabınız için teşekkür ederiz, noktanızı anlayabiliyorum, verileri EventArgs aracılığıyla döndürüyorum ve işe yarıyor. Sadece kayıt için, 'SubscriptionToken' sanal değil 'yönteminden bu yana SyncronousEvent sınıfı oluşturamadım. Howerver, sorunuz bana çok yardımcı oldu. – Dante
@Dante AbonelikToken'i değil, 'Abone' yöntemini (sanal olan) geçersiz kılmıyorsunuz. –
Üzgünüm, kötüyüm, sanal olmayan 'Abone 'yönteminden bahsediyordum, şu anda ona bakıyorum ve eğer örneklemini derlemeye çalışırsam VS2010 bana yöntemin sanal olmadığını söyler. Her neyse, aradığınız şey benim çözümüm, teşekkürler – Dante