Я работаю над этим примером, но я не могу связать обратный вызов и потоки.Я хочу вот что.
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;
}