2
我用旗语在这段代码信号灯控制downloadinf过程
static Semaphore s = new Semaphore(1,1);
private void button2_Click(object sender, EventArgs e)
{
Thread[] t = new Thread[full_list];
for(int i=0;i<full_list;i++)
{
if (sorted_list[i].audio_node != null)
if (sorted_list[i].audio_node.Checked == true)
{
t[i] = new Thread(DownloadFile);
t[i].Start(sorted_list[i]);
}
}
}
private void DownloadFile(object a)
{
s.WaitOne();
if (InvokeRequired)
{
BeginInvoke(new DownloadFileDelegate(DownloadFile),new object[1] {a});
return;
}
else
{
download process....
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
s.Release();
}
但它不工作,我prorgram冻结。我试图解决这个问题,但我不知道为什么它不适用于信号量。所有组件都包括正确下载工作。
关于下载,我当我下载时,希望在Gui中显示进度。 – jenius
@jenius - 当你在一个线程上下载的时候,你可以在gui线程上调用一个'BeginInvoke'方法来说出已经下载了多少,相应的更新gui。 – Sean
我这样做,现在信号量不会冻结我的程序,但它仍允许同时下载2个或更多文件。这是我无法接受的。 – jenius