2009-08-06 17 views
6

Tamam, bu yüzden neden bulamayacağımı biraz kafam karıştıyorum ya da yoksa, Microsoft neden bunu uygulamadı?NetworkStream, SerialPort için DataReceived benzeri bir şey var mı? (C#)

İşte benim senaryo, DataAvailable adlı hoş bir küçük boolean olan bir NetworkStream'im var ve ihtiyacım olan şey dışarı atlayıp "Hey, sizin için mevcut veriler var!" (çünkü ben tembelim ve daha çok "Tam olarak, bu zaman var" yanıtını alana kadar "Tamam, mevcut olan herhangi bir veri var mı?" sorusunu sormaktan daha fazla veri olduğu söylendi.

SerialPort (hoş bir olaya (DataReceived) sahip olan, bana veriyi porttan aldığımı bildiren) benzer bir şey hoş olurdu. Ama ben bir NetworkStream ile bir Soket kullanıyorum.

Eksik olduğumu açıkça belirten bir şey varsa, beni doğru yöne doğrultun, ancak, bu DataAvailable özelliğinde bazı Veri Bağlama kullanmak zorunda kalacağım anlamına gelir, ve true olarak ayarlandığında kendi 'ev yapımı' olayımı/işlevimi çağırmak için? Eğer bu böyle olacaksa, lütfen topu yuvarlamak için küçük bir örnek verebilir misiniz?

Düzenleme
biri gelir bulabilirim nasıl bana açıklayabilir/a SerialPort ile kullanılan DataReceived Olay son derece benzer bir şey yaratmak, ancak akış yapıldığında bir Yuva için uygulanan etmek için My mükemmel cevap olurdu bir NetworkStream!

Şimdiden teşekkürler, takdir.

cevap

2

NetworkStream sınıfında (see MSDN) hiçbir etkinlik bulunmamaktadır. NetworkStream, Stream'dan miras alır, bu nedenle olaylara dayanmayan akış modeli izler. Eşzamansız veri almanız gerekiyorsa, yöntemini kullanın

7

Sadece Thomas'ın yanıtını açıklamak için, BeginRead yöntemiyle familliar olmayan ve bu sorunun cevabını anlamak isteyen herkes için bir açıklama yapın. :

AsyncCallBack MyCallBack = new AsynCallBack(DataReceived); 
networkStream.BeginRead(buffer, offset, size, MyCallBack, MyObject); 

sonra DataReceived işlevi oluşturun:

private void DataReceived(IAsynResult result) 
    { 
    //call receive functionality 
    } 

Bu SerialPort.DataReceived olay nasıl çalıştığını çok benzer DataReceived arayacak.

+5

Okuma işlemini doğru bir şekilde tamamlamak ve verileri almak için hala .EndRead yöntemini çağırmanız gerektiğini belirtmek gerekir. – Andy

İlgili konular