protected void s(){
thread = new System.Threading.Thread(
new System.Threading.ThreadStart(download));
thread.Start();
}
protected void download()
{
//进行多文件下载操作
SFTP.download(drive);
}
private System.Threading.Timer timerlisten;
protected void start()
{
s(); //这里我启用一个线程
timerlisten = new System.Threading.Timer(new TimerCallback(displayProgess), this, 5000, 100);
//我又启用一个timer的多线程,来监控单个文件下载的进度
} //我想知道怎么才能监控到下载进程的结束,我试过在里面加上
thread.join();
//但是线程就会阻塞在那了,timer都走不了,必须得等那个下载进程走完,这不是我想要的效果
//我也试过用其他办法
AutoResetEvent events = new AutoResetEvent(false);
List<AutoResetEvent> Events = new List<AutoResetEvent>();
Events.Add(events);
WaitCallback wait = new WaitCallback(s);
ThreadPool.QueueUserWorkItem(wait);
if (WaitHandle.WaitAll(Events.ToArray()))
{
MessageBox.Show("2");
}
//还是不行,求解= =
解决方案 »
- |ZYC| 我有一个webBrowser控件,如何让他加载无一个页面后执行一段JS 谢谢
- DATASET UPDATE回数据库的时候,对于性别这种转换显示内容的应该怎么处理
- 看看这个数据库操作怎么做?
- 软件开发时关于数据库建库问题??
- 为什么值为null?
- C#能否实现没有打印机的情况下,打印预览呢
- TCP QQ
- 急需C#的朋友帮忙,在线等待。
- 正则匹配cookie字符串问题
- VS2017告警:需要运行Windows10才能打开此项目。请更新到Windows10,以继续进行通用windows应用项目开发。
- winform控件的使用问题,本人初次使用winform,麻烦各位大大帮忙,公司项目非常急,谢谢大家!
- 求高手。关于menu的事件
可以用Thread ::ThreadState 属性就你代码的注释来看
你至少要知道正在下载的文件的大小,
记录每次接收的大小
可以根据时间自己评估速度,
来计算下载进度的百分比。
dllimport下postmessage
events.WaitOne();下载线程中
SFTP.download(drive);
evetns.Set();
ps:如果SFTP.download(drive);另开线程,则另当别论。不是很理解你的疑问
WaitCallback wait = new WaitCallback(startagain);
ThreadPool.QueueUserWorkItem(wait,events );
thread = new System.Threading.Thread(
new System.Threading.ThreadStart(delegate
{
while(true ){
if (events.WaitOne(-1, true))
{
events.Set();
MessageBox.Show("2");
break;
}
}
}));
thread.Start();
我也试过这样写,但是messagebox根本不鸟我回楼上,我下载的进程和监控的进程都是另外开的
我现在想让主进程知道A完了,好让A再执行,同时
不影响B工作差不多,我现在就像知道这样的
form:
//启动主线程
//启动监控线程
void button_click()
{
manualEvent.Set();
}void MainWork()//主线程
{
while(true)
{
manualEvent.WaitOne();
manualEvent.ReSet();
//启动下载线程
}
}void DownLoad()//下载线程
{
//dosomething
manualEvent.Set();
}伪代码
我混淆了概念哈,结贴