私はこの例で取り組んでいますが、私はコールバックとスレッドをメッシュすることができません。 私が欲しいのはこれです。
1)ボタンを押します 2)実行中のプログレスバーを開始します 3)新しいスレッドを呼び出して長時間実行するプロセス 4)長時間実行されているプロセスでコールバックすると、進行状況バーが停止します。コールバックを使用したスレッド化の例は機能しません。
私は何かを持っています... DoSomethingInThreadのコールバックパラメータはnullになりますが、 StopProgressBar()はProgressBarコントロールで動作するため、静的にすることはできません。
static bool done;
static readonly object locker = new object();
static ParameterizedThreadStart threadStarter = new ParameterizedThreadStart(DoSomethingInThread);
private Thread workerThread = new Thread(threadStarter);
public delegate void StopProgressBarCallback()
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
StartProgressBar();
workerThread.Start();
}
static void DoSomethingInThread(object callback)
{
StopProgressBarCallback stopper = callback as StopProgressBarCallback;
lock (locker)
{
Thread.Sleep(5 * 1000);
}
stopper();
}
private void StartProgressBar()
{
progressBar1.MarqueeAnimationSpeed = 30;
progressBar1.Style = ProgressBarStyle.Marquee;
}
public void StopProgressBar()
{
progressBar1.Style = ProgressBarStyle.Continuous;
}
BackgroundWorkerクラスは非常に簡単で、初めての作業でした。提案していただきありがとうございます。 – KickinMhl