2012-03-21 5 views
0

私は.netプログラミングでかなり新しいです。私はいくつかの提案をしたいと思います。 1つのフォームを作成するために、VS2010 Designerを使用して簡単なクライアントGUIアプリケーションを作成しようとしています。 1 comboBox(可能なコマンドのリストを含む) 1ボタンコンボボックス) 1つの画像ボックス(私は自分のサーバーアプリケーションから受信した画像を表示します) ボタンを押すたびに、クライアントアプリケーションを作成し、サーバーから受信した画像ボックスに別の画像を表示できました。Windowsのループをブロックしない方法

私は何をしたいのですか?イベントボタンをクリックするとブロッキングループではないので、クライアントコンボボックスコマンドがイメージングを開始するように設定されている限り、サーバーによって送信されたイメージはピクチャボックスに表示され、クライアントコンボボックスコマンドがイメージングを停止するように設定されている場合

私はイベントボタンをクリックしてループするとGUIが応答しなくなり、コンボボックスでコマンドを変更する機会がないため、その方法については分かりません。

ご協力いただければ幸いです。おかげさまで

+0

関連するコードを表示してください。おそらく間違ったコントロールを使用して選択しています(なぜコンボボックスですか?)。何かを修正するには、修正する場所を知る必要があります; – gbianchi

+0

こんにちは、私は別のスレッドを使用してループをブロックしないことを実現することができました。 私はEthThreadを持っていて、クライアントがサーバとの間でデータをやりとりしたり、サーバとの間でデータをやりとりしたりしています。そして、PictureRefresh()メソッドが呼び出されるたびにimagePacketが受信されます。 –

答えて

1

ここでは、BackgroundWorkerクラスのReportProgress機能を使用してGUIを更新する「安価な」方法があります。まず、フォームにBackgroundWorkerオブジェクトをドロップします。次に...

private void Form1_Load(object sender, EventArgs e) 
{ 
    backgroundWorker1.DoWork += DoWork;   
    backgroundWorker1.ProgressChanged += UpdateGui; 
    backgroundWorker1.WorkerReportsProgress = true; 
    backgroundWorker1.RunWorkerAsync(); 
} 

private void DoWork(object sender, DoWorkEventArgs e) 
{ 
    while (true) 
    { 
     System.Threading.Thread.Sleep(1000); 
     backgroundWorker1.ReportProgress(0); 
    }   
} 
void UpdateGui(object sender, ProgressChangedEventArgs e) 
{ 
    textBox1.Text = DateTime.Now.ToLongTimeString(); 
} 
関連する問題