2010-03-01 18 views
5

Web'in her yerine baktım, ancak şu soruya bir cevap bulamıyorum.NamedPipeClientStream.Read call İptal

İstemci programında C#/.NET NET NamedPipeClientStream örneğim var ve bir iş parçacığı bir sunucudan veri almak için NamedPipeClientStream.Read (bayt [], int, int) çağırıyor. Sunucu, müşteriye veri güncellemeleri gönderir.

Okuma engelleme. Eğer istemciyi kapatmak istersem, Oku aramayı iptal etmenin/çıkarmanın bir yolu var mı? Adlandırılmış boru örneğinde Close'ı aramayı denedim, ancak Oku adlı iş parçacığı üzerinde hiçbir etkisi yok.

Bir Okumayı iptal etmenin bir yolu olacağını düşünürdüm. Değilse, çok kötü tasarlanmış bir API gibi görünüyor, çünkü programınız borunun merhametindedir.

Herhangi bir bilgi büyük beğeni topluyor.

-Chris

cevap

7

PipeOptions bağımsız değişkenini alan NamedPipeClientStream yapıcısını kullanın. PipeOptions.Asynchronous belirtme, Close() yöntemini çağırdığınızda Read() çağrısını tamamlayacak. Read() yöntemi 0 değerini döndürür.

+0

: D Benim kahramanımsın! Borunun Eşzamansız olarak ayarlanması, Kapat çağrıldığında geri dönmek için bloke çağrının okunmasına neden olur. Çok teşekkürler! – Chris

0

değil doğrudan Sorunuzun cevabı, ama - ben oldukça yakın bazı NamedPipe IPC yapmak zorunda ve ben WCF harika olduğunu gördük. Bir POC'yi uygulamak için bir saatten az sürdüm ve evet, isteğinizi iptal etme anlamına da geldiğinden eminim - ve bayt dizileri açısından düşünmek zorunda değilsiniz.

Bu sizin için bir seçenek mi?

+1

WCF'ye biraz baktım ve gerçekten heyecanlandım, ancak geliştirdiğim istemci kendi başına özel bir sunucuyla (C++, .NET değil) konuşmalı. önceden tanımlanmış adlandırılmış borular ve iletişim protokolü. WCF'ye baktığımda, belgelerin büyüklüğü yüzünden hızla bunaldım. WCF'yi özel bir protokolle adlandırılmış borular kullanarak mevcut bir sistemle konuşmak için kullanıp kullanamayacağımı hızlıca belirleyemedim. Eğer bunun mümkün olup olmadığını bilen ve bana doğru yönde işaret edebilecek biri varsa, bunu takdir ediyorum. – Chris