1:一个问题,我需要这样一个功能,要写入10个EXCEL,为了不影响主程序的进行,所以我新开了一个线程
Thread t=new Thread(writeExcel);
t.start();
2:我想在这个线程结束后给我个提示:“excel写入完成”.
3:但是这个Messagebox我由于有其他的情况,所以不能把他写在writeExcel里面,因为我主线程同时还要做别的操作。
4:问题是我怎么在t.start()结束后给我的主程序一个信号,让主程序继续运行(但必须的在这个线程结束后)
Thread t=new Thread(writeExcel);
t.start();
2:我想在这个线程结束后给我个提示:“excel写入完成”.
3:但是这个Messagebox我由于有其他的情况,所以不能把他写在writeExcel里面,因为我主线程同时还要做别的操作。
4:问题是我怎么在t.start()结束后给我的主程序一个信号,让主程序继续运行(但必须的在这个线程结束后)
{
Frmprogess fm = new Frmprogess();
fm.StartPosition = FormStartPosition.CenterScreen;
fm.Show();
Thread t = new Thread(outmorning);
t.Start();
Messagebox.show("写入完成"); }
我一个点CLICK后他全都给我执行了,我就想让fm.show()正常执行,然后执行后自己弹出提示,兄弟们帮我顶下啊
你用事件,那还不是要在writeExcel里调用吗如果实在不能在writeExcel里写,也不能阻塞主线程的话,就再开一个线程
Thread t2=new Thread(()=>
{
t.Join();
MessageBox.Show(.......);
});
或者用一个Timer来反复检测t线程是否终止
t2.Start();
托管:
delegate bool ExecuteOver();
定义一个子线程类,在子线程里,申明一个托管的变量,
等你子线程执行完成,调用此托管方法。
在主线程里,启动子线程之前,设置子线程的托管变量为你要执行的函数。消息:
const WM_EXECUTEOVER = WM_USER + 0x0001;
定义一个子线程类,在子线程里,申明一个指针型变量IntPtr,
等你子线程执行完成,给此变量发送消息。
在主线程里,启动子线程之前,设置子线程的指针型变量为主窗口的句柄,
在主线程里捕捉消息,执行你的函数。
{
private Thread _Thread; public ExcelThread()
{
Thread t = new Thread(writeExcel);
} public void Star()
{
this.Star();
} public void writeExcel()
{
//.....操作 if (Over != null) Over();
} public delegate void ThreadRunOver();
public event ThreadRunOver Over; }
使用的时候 public void StarWriteExcel()
{
ExcelThread a = new ExcelThread();
a.Over += new ExcelThread.ThreadRunOver(a_Over);
a.Star();
} void a_Over()
{
MessageBox.Show("????");
}
不知道是不是这个意思
Frmprogess fm = new Frmprogess();
fm.StartPosition = FormStartPosition.CenterScreen;
fm.Show(); ExcelThread a = new ExcelThread();
a.Over += new ExcelThread.ThreadRunOver(a_Over);
a.Star(); public class ExcelThread
{
private Thread _Thread; public ExcelThread()
{
Thread t = new Thread(writeExcel);
_Thread = t;
} public void Star()
{
_Thread.Start();
}
public void writeExcel()
{
Excelwrite()//方法
if (Over != null) Over();
}
public delegate void ThreadRunOver();
public event ThreadRunOver Over; }