GetFiles
創建這就要求CopyFiles
第二個線程,我只是想每一個文件複製時間填寫列表框的文件名,但一旦代碼命中行:C#主線程被第二個線程使用信號封鎖?
listBox1.Invoke((MethodInvoker)delegate { PrintProgress(i.ToString()); }, new object[] { });
主線程被阻塞,任何想法?
void GetFiles()
{
AutoResetEvent autoEvent = new AutoResetEvent(false);
ThreadPool.QueueUserWorkItem(new WaitCallback(CopyFiles),autoEvent);
//some unrelated code
autoEvent.WaitOne();
}
private void CopyFiles(object stateInfo)
{
for (int i = 0; i < 10; i++)
{
//SetControlPropertyValue(listBox1, i.ToString());
listBox1.Invoke((MethodInvoker)delegate { PrintProgress(i.ToString()); }, new object[] { });
Thread.Sleep(1000);
}
// Signal that this thread is finished.
((AutoResetEvent)stateInfo).Set();
}
private void PrintProgress(string number)
{
listBox1.Items.Add(number);
}
沒有攝製。它適用於我的機器。 –
@Albert - 你有沒有試過不讓主線睡着1秒的機會? –
是的,我做了,其實我只是爲了測試而設置的,但我在那裏做了實際的文件複製操作。 – Albert