110,010
社区成员




public delegate void ThreadSafe();
//用于下载,同时也会更新TaskView
private void Download()
{
//下载,会一直阻塞直到下载完成
}
//开始下载
private void button1_Click(object sender, System.EventArgs e)
{
Thread th = new Thread(new ThreadStart(StartThread));
th.Start();
}
private void StartThread()
{
if (TaskView.InvokeRequired)
{
ThreadSafe ts = new ThreadSafe(Download);
TaskView.BeginInvoke(ts);//也试过Invoke
}
else
Download();
}
public delegate void ThreadSafe();
//用于下载,同时也会更新TaskView
private void Download()
{
//下载,会一直阻塞直到下载完成
}
//开始下载
private void button1_Click(object sender, System.EventArgs e)
{
//UI线程
Thread th = new Thread(new ThreadStart(StartThread));
th.Start();
}
private void StartThread()
{
//UI线程或其他线程
if (TaskView.InvokeRequired)//如果不是在UI线程,返回true
{
//其他线程
ThreadSafe ts = new ThreadSafe(Download);
TaskView.BeginInvoke(ts);//也试过Invoke
}
else
//UI线程
Download();
}
public delegate void ThreadSafe();
//用于下载,同时也会调用UpdateView
private void Download()
{
//下载,会一直阻塞直到下载完成
//其他线程
//...
UpdateView()
//...
}
//更新TaskView
private void UpdateView()
{
//UI线程或其他线程
if (TaskView.InvokeRequired)//如果不是在UI线程,返回true
{
//其他线程
ThreadSafe ts = new ThreadSafe(UpdateView);
TaskView.BeginInvoke(ts);//或者用Invoke,在这里差不多
}
else
{
//UI线程,想更新什么就更新什么
TaskView.X=Y;
}
}
//开始下载
private void button1_Click(object sender, System.EventArgs e)
{
//UI线程
Thread th = new Thread(new ThreadStart(Download));
th.Start();
}
private void Download()
{
if( Ftp.download("a.gif") )//就卡在这里了,因为下载是使用strem的,也试过每读一次sleep(1)
UpdateView();//更新界面的方法
}
//开始下载
private void button1_Click(object sender, System.EventArgs e)
{
Thread th = new Thread(new ThreadStart(StartThread));
th.Start();
}
private void StartThread()
{
if (TaskView.InvokeRequired)
{
ThreadSafe ts = new ThreadSafe(Download);
ts.IsBackground = true;
TaskView.BeginInvoke(ts);//也试过Invoke
}
else
Download();
}
//用于下载,同时也会更新TaskView
private void Download()
{
//下载,会一直阻塞直到下载完成
for (int i = 0; i < 100; i++)
{
Thread.Sleep(500); //用于下载
string str = i + "% downloaded"; //用于下载
UpdateTaskView(str); //用于更新TaskView
}
}
//开始下载
private void button1_Click(object sender, System.EventArgs e)
{
Thread th = new Thread(new ThreadStart(Download));
th.IsBackground = true;
th.Start();
}
private void UpdateTaskView( object newArrival )
{
if (TaskView.InvokeRequired)
{
TaskView.Invoke(new ParameterizedThreadStart(UpdateTaskView), newArrival);
}
else
{
TaskView.Items.Add(newArrival.ToString()); // change this line to fit your need
}
}