Winform单线程窗体假死问题紧急求救!

caijia 2007-08-30 02:56:09
我winform 里面有个方法
public void UserState()
{
string filepath=this.textBox1.Text.Trim();
string path;
if (filepath.Substring(filepath.Length-1,1)!=@"\")
path=filepath+@"\UserRegion";
else
path=filepath+@"UserRegion";
Directory.CreateDirectory(path); //创建“用户管理”文件夹

DataTable dt=getUser();

string m1="";
string m2="";
string m3="";
string m4="";
//string restr="";
DrawChart ch=new DrawChart();
for(int i=0;i<dt.Rows.Count;i++)
{
string fullpath=path+@"\"+dt.Rows[i]["用户名"].ToString();
Directory.CreateDirectory(fullpath); //创建“用户管理--用户”文件夹

Directory.CreateDirectory(fullpath+@"\in"); //创建“用户管理--用户---in”文件夹
Directory.CreateDirectory(fullpath+@"\out"); //创建“用户管理--用户---out”文件夹

string hs_in=dt.Rows[i]["进口过货物的HS编码"].ToString();
string hs_out=dt.Rows[i]["出口过货物的HS编码"].ToString();

string com_name="深圳市奇鼎实业有限公司";
#region 进口
if (hs_in!="")
{
string [] s_in=hs_in.Split('$');
for(int j=0;j<s_in.Length;j++)
{
string hs1=s_in[j].ToString();
Directory.CreateDirectory(fullpath+@"\in\"+hs1+"");
m1=fullpath+@"\in\"+hs1+""+@"\Month1";
m2=fullpath+@"\in\"+hs1+""+@"\Month3";
m3=fullpath+@"\in\"+hs1+""+@"\Month6";
m4=fullpath+@"\in\"+hs1+""+@"\Month12";

Directory.CreateDirectory(m1); //创建“用户管理--用户---in---hs编码---Month1”文件夹
Directory.CreateDirectory(m2); //创建“用户管理--用户---in---hs编码---Month3”文件夹
Directory.CreateDirectory(m3); //创建“用户管理--用户---in---hs编码---Month6”文件夹
Directory.CreateDirectory(m4); //创建“用户管理--用户---in---hs编码---Month12”文件夹

label1.Text="正在处理的用户是:"+dt.Rows[i]["用户名"]+"\n处理1个月用户进口过的HS编码是:" +s_in[j].ToString()+"\n";
//调用生成图片
string saveurl1=fullpath+@"\in\"+hs1+""+@"\Month1\";
ch.DrawChartIn(hs1,1,c1Chart1,saveurl1,com_name);

this.label1.Text="正在处理的用户是:"+dt.Rows[i]["用户名"]+"\n处理3个月用户进口过的HS编码是:" +s_in[j].ToString()+"\n";
//调用生成图片
string saveurl2=fullpath+@"\in\"+hs1+""+@"\Month3\";
ch.DrawChartIn(hs1,2,c1Chart1,saveurl2,com_name);


label1.Text="正在处理的用户是:"+dt.Rows[i]["用户名"]+"\n处理6个月用户进口过的HS编码是:" +s_in[j].ToString()+"\n";
//调用生成图片
string saveurl3=fullpath+@"\in\"+hs1+""+@"\Month6\";
ch.DrawChartIn(hs1,3,c1Chart1,saveurl3,com_name);


label1.Text="正在处理的用户是:"+dt.Rows[i]["用户名"]+"\n处理12个月用户进口过的HS编码是:" +s_in[j].ToString()+"\n";
//调用生成图片
string saveurl4=fullpath+@"\in\"+hs1+""+@"\Month12\";
ch.DrawChartIn(hs1,4,c1Chart1,saveurl4,com_name);
//restr="正在处理的用户是:"+dt.Rows[i]["用户名"]+"\n处理的HS编码是:" +s_in[j].ToString()+"\n";

}
}
#endregion

#region 出口
if (hs_out!="")
{

string [] s_out=hs_out.Split('$');
for(int j=0;j<s_out.Length;j++)
{
string hs2=s_out[j].ToString();
Directory.CreateDirectory(fullpath+@"\out\"+hs2+"");
m1=fullpath+@"\out\"+hs2+""+@"\Month1";
m2=fullpath+@"\out\"+hs2+""+@"\Month3";
m3=fullpath+@"\out\"+hs2+""+@"\Month6";
m4=fullpath+@"\out\"+hs2+""+@"\Month12";

Directory.CreateDirectory(m1); //创建“用户管理--用户---out---hs编码---Month1”文件夹
Directory.CreateDirectory(m2); //创建“用户管理--用户---out---hs编码---Month3”文件夹
Directory.CreateDirectory(m3); //创建“用户管理--用户---out---hs编码---Month6”文件夹
Directory.CreateDirectory(m4); //创建“用户管理--用户---out---hs编码---Month12”文件夹

label1.Text="正在处理的用户是:"+dt.Rows[i]["用户名"]+"\n处理1个月用户出口过的HS编码是:" +s_out[j].ToString()+"\n";
//调用生成图片
string saveurl1=fullpath+@"\out\"+hs2+""+@"\Month1\";
ch.DrawChartOut(hs2,1,c1Chart1,saveurl1,com_name);

label1.Text="正在处理的用户是:"+dt.Rows[i]["用户名"]+"\n处理3个月用户出口过的HS编码是:" +s_out[j].ToString()+"\n";
//调用生成图片
string saveurl2=fullpath+@"\out\"+hs2+""+@"\Month3\";
ch.DrawChartOut(hs2,2,c1Chart1,saveurl2,com_name);


label1.Text="正在处理的用户是:"+dt.Rows[i]["用户名"]+"\n处理6个月用户出口过的HS编码是:" +s_out[j].ToString()+"\n";
//调用生成图片
string saveurl3=fullpath+@"\out\"+hs2+""+@"\Month6\";
ch.DrawChartOut(hs2,3,c1Chart1,saveurl3,com_name);


label1.Text="正在处理的用户是:"+dt.Rows[i]["用户名"]+"\n处理12个月用户出口过的HS编码是:" +s_out[j].ToString()+"\n";
//调用生成图片
string saveurl4=fullpath+@"\out\"+hs2+""+@"\Month12\";
ch.DrawChartOut(hs2,4,c1Chart1,saveurl4,com_name);
//restr="正在处理的用户是:"+dt.Rows[i]["用户名"]+"\n处理的HS编码是:" +s_out[j].ToString()+"\n";

}
}


#endregion
}
label1.Text="图形处理完毕!";
}

然后在form_load事件里:
thread=new Thread(new ThreadStart(this.UserState));
然后在开始按钮的单击事件里
thread.Start();
问题就出来了只要我把这个窗体最小化或移动
窗体就假死了但程序还在执行并且可以执行完毕。
因为我这个方法处理时间较长所以就用了个单线程。
我想问怎么解决这个问题啊?
...全文
711 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluedodo 2007-09-11
  • 打赏
  • 举报
回复
关闭CheckForIllegalCrossThreadCalls
hcs2007 2007-09-11
  • 打赏
  • 举报
回复
顶上
zxkid 2007-09-11
  • 打赏
  • 举报
回复
可以使用backgroundWorker组件
hm7921936 2007-08-30
  • 打赏
  • 举报
回复
委托. 详见MSDN 使用委托在线程间修改数据.. 或者把要修改对象的线程安全检查关闭, 就可以直接访问.
caijia 2007-08-30
  • 打赏
  • 举报
回复
自己顶!
caijia 2007-08-30
  • 打赏
  • 举报
回复
怎么做?
说说
以前都是做web的!!!
icefeiji 2007-08-30
  • 打赏
  • 举报
回复
异步调用的时候显示label.text的内容需要用代理啊~
caijia 2007-08-30
  • 打赏
  • 举报
回复
我试了下
其他的还好但是
this.label1.text没有显示了!!
jiatong1981 2007-08-30
  • 打赏
  • 举报
回复
thread=new Thread(new ThreadStart(this.UserInvoke));
thread.IsBackground= true;
thread.Start();

……

private void UserInvoke()
{
MethodInvoker mi = new MethodInvoker(UserState);
while (true)
{
this.BeginInvoke(mi);
Thread.Sleep(300) ;
}
}
private void UserState()
{

//do your code

}
jiatong1981 2007-08-30
  • 打赏
  • 举报
回复
异步调用……
zhchg6666 2007-08-30
  • 打赏
  • 举报
回复
up
源码下载地址: https://pan.quark.cn/s/0d6e3002ba51 ### IR2110中文资料知识点详述 #### 一、概述 IR2110是一种专为脉冲宽度调制应用而设计的高性能驱动集成电路,在各类功率转换设备中具有广泛的应用,特别是在需要实现隔离驱动的场景下表现出色。该芯片融合了光电隔离与电磁隔离的优势,能够达成快速响应并保持较小的物理尺寸,尤其适合用于中小功率的变换装置。 #### 二、IR2110内部结构与特点 **1. 内部结构** - **封装形式**:采用DIP14引脚封装。 - **内部组成**:由逻辑输入单元、电平平移单元以及输出保护单元这三个主要部分构成。 - **悬浮电源**:借助自举电路实现,使得高端工作电压最高能够达到500V,支持±50V/ns的电压变化率。 - **工作电压范围**:逻辑电源电压范围为5~15V,输出电源端电压范围为10~20V,易于与其他逻辑电平进行匹配。 - **工作频率**:最高可达到500kHz。 - **功耗**:在15V条件下静态功耗仅为116mW。 - **延迟时间**:导通延迟120ns,关断延迟94ns。 - **峰值输出电流**:图腾柱输出峰值电流为2A。 **2. 特点** - **独立输入通道**:具备独立的低端和高端输入通道配置。 - **兼容性**:逻辑电源地与功率地之间允许±5V的偏移量,便于与TTL或CMOS电平进行匹配。 - **自举电源**:内置自举电源电路,有效减少驱动电源的数量,从而简化电路设计。 - **高dv/dt能力**:具有较强的dv/dt抑制能力,适合高频开关应用。 - **低功耗**:工作状态下功耗较低,有利于提升整体效率。 #### 三、高压侧...

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧