private dialog frmDialog;
private Thread exportThread;
private Mutex mut;public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent(); frmDialog=new dialog(); frmDialog.btnThreadCancel.Click+=new EventHandler(btnThreadCancel_Click);
}private void button2_Click(object sender, System.EventArgs e)
{
if(mut==null) mut=new Mutex(); System.Threading.ThreadStart methodonthread=new ThreadStart(ExportUsingCOM);
exportThread=new Thread(methodonthread);
exportThread.Start(); frmDialog.ShowDialog();
}private void ExportUsingCOM()
{
try
{
mut.WaitOne();
System.DateTime stime=System.DateTime.Now; MyExcel excel=new MyExcel();
excel.processhanlder+=new ProcessEventHandler(changeprocessbar);
string path=Application.StartupPath+"\\" + stime.Ticks.ToString();;
excel.ExportExcel(ds.Tables[0],path,"test excel");
this.frmDialog.Invoke(new MethodInvoker(hideDialog)); System.DateTime etime=System.DateTime.Now;
DataRow row=dtCompared.NewRow();
row["export type"]="COM";
row["Row count"]=ds.Tables[0].Rows.Count.ToString();
row["start time"]=stime;
row["end time"]=etime;
row["cost time"]=etime-stime;
dtCompared.Rows.Add(row); //dataGrid2.Invoke(new MethodInvoker(SetDataGridDataSource));
mut.ReleaseMutex();
}
catch(ThreadAbortException abortException)
{
Console.WriteLine((string)abortException.ExceptionState);
}
} 我现起动一个线程导报表,然后主线程show一个模态的窗口
问题事当我第一次执行这端程序事,一切正常,再次点击导出报表救回报错,未将对象引用设置到对象的实例frmDialog.ShowDialog();程序是停在这一行上,请问是怎回事
private Thread exportThread;
private Mutex mut;public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent(); frmDialog=new dialog(); frmDialog.btnThreadCancel.Click+=new EventHandler(btnThreadCancel_Click);
}private void button2_Click(object sender, System.EventArgs e)
{
if(mut==null) mut=new Mutex(); System.Threading.ThreadStart methodonthread=new ThreadStart(ExportUsingCOM);
exportThread=new Thread(methodonthread);
exportThread.Start(); frmDialog.ShowDialog();
}private void ExportUsingCOM()
{
try
{
mut.WaitOne();
System.DateTime stime=System.DateTime.Now; MyExcel excel=new MyExcel();
excel.processhanlder+=new ProcessEventHandler(changeprocessbar);
string path=Application.StartupPath+"\\" + stime.Ticks.ToString();;
excel.ExportExcel(ds.Tables[0],path,"test excel");
this.frmDialog.Invoke(new MethodInvoker(hideDialog)); System.DateTime etime=System.DateTime.Now;
DataRow row=dtCompared.NewRow();
row["export type"]="COM";
row["Row count"]=ds.Tables[0].Rows.Count.ToString();
row["start time"]=stime;
row["end time"]=etime;
row["cost time"]=etime-stime;
dtCompared.Rows.Add(row); //dataGrid2.Invoke(new MethodInvoker(SetDataGridDataSource));
mut.ReleaseMutex();
}
catch(ThreadAbortException abortException)
{
Console.WriteLine((string)abortException.ExceptionState);
}
} 我现起动一个线程导报表,然后主线程show一个模态的窗口
问题事当我第一次执行这端程序事,一切正常,再次点击导出报表救回报错,未将对象引用设置到对象的实例frmDialog.ShowDialog();程序是停在这一行上,请问是怎回事
解决方案 »
- 关于C#互锁的问题
- 图片链接会直接打开
- 面试题,c#实现字符串反转算法..for循环中为什么不能用string?
- 高分求解~大哥大姐帮忙!!~vs2003环境中如何实现将EXCEL的内容分段导入到SQL里面~在线等!
- C# 运行后网页上出现html代码,怎么回事?
- 如何把两个excel文件合并成一个新的excel文件,并保持每个Cell的style一样
- 紧急求助
- c#跟c有什么关系?
- 请问什么是数据库的连接池?一般有什么用?
- 难题求解!!! 如何让一个非模态的 Form 只对父窗体 TopMost 而不对其他应用程序的窗口 TopMost?
- 有没有这样一种变量,本类的函数里可以访问和修改,其它类的功能只能放问,不能修改????
- 新手用SqlDataAdapter的Update方法更新数据库出错,烦死了!
然后你关闭frmDialog后frmDialog已经不存在了。