Kütüphane sınıfımdan bir dizi etkinlik geliştirmek istiyorum, ancak bazı etkinlik abonelerinin kaba olacağını ve bazı olayları işlemek için uzun zaman alacağından endişeleniyorum. Ben her olayı yükseltmek için bir iş parçacığı havuzu iş parçacığı kullanarak yetiştirme parçacığı koruyabilecek düşündü: olaya tek abone varkenBeginInvoke'u MulticastDelegate ile kullanabilir miyim?
if (packet != null && DataPacketReceived != null)
{
var args = new DataPacketEventArgs(packet);
DataPacketReceived.BeginInvoke(this, args, null, null);
}
çalışıyor, ancak en kısa sürede ikinci abone geldiğinde, DataPacketReceived
bir hale gelir Çok noktaya yayın temsilci ve hata iletisiyle birlikte bir bağımsız değişken istisnası alıyorum, "Temsilcinin yalnızca bir hedefi olmalı." Etkinliği ayrı bir iş parçacığında yükseltmenin kolay bir yolu var mı, yoksa bir iş parçacığı başlatmam ve sonra etkinliği oradan mı yükseltmem gerekiyor?
Doğru ama her abone üzerinde 'BeginInvoke' çağıran mutlaka her ayrı iş parçacığı üzerinde çalışması anlamına gelmez unutmayın: my senaryosu için, ben ayrı bir iş parçacığı üzerinde her abone için olayı yükseltmeyi tercih ettik. Bu iplik havuzunun işi. – Ani
Son birkaç gündür bu soruna birkaç kez bakıyorum, alıcıların '' nesnelerindeki 'EventHandler' türünde bir nesne olmadığını açıkça belirtmek önemlidir. –