UIを更新するためにスレッドを使用するwinformアプリケーションに問題があります。私のアプリケーションはクラウドからのファイルのアップロードとダウンロードを行います。同時に、同じウィンドウにネットワーク速度の詳細も表示しています。これらの3つの操作(アップロード、ダウンロード、n/w速度の表示)は3つの異なるスレッドによって呼び出されます。問題は、私がダウンロード/アップロードを開始すると、ウィンドウ全体がフリーズし、n/w速度表示がリフレッシュされない(1秒間隔でリフレッシュするように書き込まれる)という問題です。何が問題だろうか?前もって感謝します。Winformとスレッド(C#)
コードは次のとおりです...ダウンロード用に書いたのと同じ方法です。 ** Upload **を最初に呼び出し、次に** Download **を1つずつ呼び出すと、最初のスレッドは一時停止し、スレッドの開始をダウンロードします。一度**ダウンロード**が行われると**アップロード**が続行されます。それは並行していません。また、UIは他のボタンのクリックやウィンドウのサイズ変更、アクションの移動に対してすぐには反応しません。
public delegate void UploadDelgt();
UploadDelgt UpldDlgtObj;
private void Form1_Load(object sender, EventArgs e)
{
UpldDlgtObj = new UploadDelgt(DoUpload);
}
public void load()
{
Form1 form = this;
form.Invoke(UpldDlgtObj);
}
private void button1_Click(object sender, EventArgs e)
{
thrd = new Thread(new ThreadStart(load));
thrd.Start();
thrd.IsBackground = true;
}
public void DoUpload()
{
//uploads file block by block and updates the progressbar accordingly..
}
コードを入力する必要があります。 – adt
あなたのコードはあなたが思っていることをしていないと思います。見ることなく言うのは難しい。確かに、メインのGUIスレッドがラベルをアップさせるのを止めることが必要です。 – Jodrell
ネットワーク速度のようなパフォーマンスデータを表示するのは、通常、スレッドからの通知/シグナリングではなく、GUIスレッドタイマーによって行われます。ネットワークの詳細が速すぎて変更に効率的かつ効果的な直接シグナリングができず、GUI入力キューが詰まる傾向があります。 –