线程未启动

时间:2012-06-25 13:58:08

标签: c# winforms multithreading

这一定是一个非常愚蠢的问题。我试图在一个新线程中运行一个耗时的过程,所以我将能够显示进度条。我以前从未使用过线程。我必须做错事,因为当我使用.Start()方法时似乎没有任何事情发生。

private void btnStart_Click(object sender, EventArgs e)
{
    clsScrap oScrap = new clsScrap(txtInputFilename.Text,txtImgSrc.Text);
    Thread ScrapThread = new Thread(new ThreadStart(oScrap.Scrap));
    ScrapThread.Start();
    while (oScrap.GetLinkCount() < 0) ;
    myProgressBar.Minimum = 1;
    myProgressBar.Maximum = oScrap.GetLinkCount();

    while (ScrapThread.IsAlive)
    {
        Thread.Sleep(1000 * 30);
        myProgressBar.Value = oScrap.GetCurrLinkNo();
    }
}

我在oScrap.Scrap()的开头放了一个断点,但它永远不会到达那里。在ScrapThread.Start();行之后,它只会移动到下一个while循环并卡在那里(函数oScrap.GetLinkCount()假设在初始化后快速返回正值)

我做错了什么? 谢谢你提前。

1 个答案:

答案 0 :(得分:5)

您正在UI线程上睡觉(您的按钮单击事件在UI线程上运行)。因为您的UI线程没有机会更新Window(您只是睡眠或设置一个值),所以您看不到任何更改。

请尝试使用BackgroundWorker 它提供了可在Progress更改时处理的事件。您可以订阅活动ProgressChangedRunWorkerCompleted以获得有关正在发生的事件的通知,并且您可以通过BackgroundWorker方法ReportProgress触发ProgressChanged活动。

请点击此处了解更多信息和示例:

MSDN Documentation for BackgroundWorker