2016-11-19 11 views
0

c#を使用して、完了する前に関数を実行した後にのみループを繰り返します。ここに私のコードですC#ストリームを定数ループで読み込みます

TcpListener serv = new TcpListener(IPAddress.Any, 19148); 
serv.Start(); 
TcpClient clie = serv.AcceptTcpClient(); 
NetworkStream stre = clie.GetStream(); 
byte[] buffer = new byte[2048]; 
Form1 f1 = new Form1(); 
f1.Show(); 
f1.TopMost = true; 
///the code to repeat starts here 
stre.Write(Encoding.UTF8.GetBytes("Enter Message: "), 0, Encoding.UTF8.GetByteCount("Enter Message: ")); 
stre.Read(buffer, 0, buffer.Length); 
f1.label1.Text = Encoding.UTF8.GetString(buffer); 
///ends here 

私はループを読み上げましたが、私は私のプログラムをクラッシュします。

私はほとんどのことを試しましたが、これまでのところ最も有望なものでしたが、最後の入力時にのみフォームが表示されます。

int i = 0; 
while(i < 3) 
{ 
    stre.Write(Encoding.UTF8.GetBytes("Enter Message: "), 0, Encoding.UTF8.GetByteCount("Enter Message: ")); 
    stre.Read(buffer, 0, buffer.Length); 
    f1.label1.Text = Encoding.UTF8.GetString(buffer); 
    i++; 
} 

私は正しい方向に私を指すためにもリードがないので、どんな助けもありがたいです。

+0

コード内に「stre」とは何ですか?関連コードを表示してください! –

+0

これは私の投稿で今表示されている – orbit

+0

ループの前に 'Form.Show'を入れてみましたか? – KMoussa

答えて

1

実際には、自分のスレッドに読み込みを移動する(または非同期メソッドを使用する)必要があります。あなたはフォーム上で.Showと呼ばれましたが、実際のショーは瞬間的ではなく、自分の入力が自分自身を描くために使用しているスレッドが必要です。あなたは絶対に別のスレッド(非同期、BackgroundWorkerの、タスクなど)にあなたの読み取りループを移動することができない場合は、次のようにコードを変更することができます:

TcpListener serv = new TcpListener(IPAddress.Any, 19148); 
serv.Start(); 
TcpClient clie = serv.AcceptTcpClient(); 
NetworkStream stre = clie.GetStream(); 
byte[] buffer = new byte[2048]; 
Form1 f1 = new Form1(); 
f1.Show(); 
f1.Refresh(); // Do it RIGHT NOW! 
f1.TopMost = true; 
int i = 0; 
while(i < 3) 
{ 
    stre.Write(Encoding.UTF8.GetBytes("Enter Message: "), 0, Encoding.UTF8.GetByteCount("Enter Message: ")); 
    stre.Read(buffer, 0, buffer.Length); 
    f1.label1.Text = Encoding.UTF8.GetString(buffer); 
    f1.label1.Refresh(); // Do it right now! 
    i++; 
} 

あなたのフォームが表示されることがわかり、それだろう絶対に凍っている。サイズを変更することはできません。ループが終了するまでは、再描画されません。非常に良い経験ではありません。

+0

ありがとう、これは完璧です。私はこれをリモートからアクセスするつもりですので、私は任意の運と終了関数を実装することができるようになります。 – orbit

+0

前述したように、動作しますが、実際のアプリケーションでは回避する必要があります... UIのレスポンスが低下するためです。 – Phil1970

関連する問題