本人正在做一个系统,由于某些操作可能等待的时间比较长,所以我在进行某些操作的时候调用一个父类的方法去显示一个请等待的界面。但是现在出现一些问题请大家帮忙看下。
窗体父类:
public partial class FormPubBase : Form //我所有窗体的基类,除了请等待那个窗体
{
private Thread thr; //声明一个线程的对象
public FormPubBase()
{
InitializeComponent();
formPleaseWait = new frmPleaseWait(); //这个是一个显示请等待的窗体
}
protected void frmPleaseWaitStartShow() //继承方法,执行调用线程方法
{
thr = new Thread(new ThreadStart(frmPleaseWaitShow));
thr.Start();
} protected void frmPleaseWaitEndShow() //继承方法,停止线程
{
if(obj.ThreadState == ThreadState.Running)
thr.Abort();
} private void frmPleaseWaitShow() //线程调用的私有方法,显示一个请等待的窗体
{
lock (this) //我怀疑问题就出在这一步,该锁什么对象才正确呢,请大家参谋一下。
{
this.formPleaseWait.Visible = false;
this.formPleaseWait.ShowDialog();
}
}
}以下是一段继承FormPubBase类的窗体 public partial class frmCar : FormBase
{
public frmCar()
{
InitializeComponent();
}
private void Car_Load(object sender, EventArgs e)
{
this.frmPleaseWaitStartShow(); //调用父类的方法
//...........
//...........执行一些要处理的东西
//............
this.frmPleaseWaitEndShow(); //调用父类的方法
}
}现在就会出现一种问题,由于加载frmCar这个窗体时调用了父类的那两个方法,有时会出现一加载frmCar这个窗体时程序就无响应了,有时候又正常。(配置高的机器出现的几率很低,配置低的机器经常出现这个问题。)在加载frmCar这个窗体时如果注释掉那两个方法就没问题,一切正常,不管配置高低的机器都行。我检查了父类那方法我就怀疑可能是lock的问题,但具体该怎么做暂时没有思路。因为很多窗体都用到了这2个方法,所以不可能把这2个方法独立开来的。大家帮忙想下怎么改。
窗体父类:
public partial class FormPubBase : Form //我所有窗体的基类,除了请等待那个窗体
{
private Thread thr; //声明一个线程的对象
public FormPubBase()
{
InitializeComponent();
formPleaseWait = new frmPleaseWait(); //这个是一个显示请等待的窗体
}
protected void frmPleaseWaitStartShow() //继承方法,执行调用线程方法
{
thr = new Thread(new ThreadStart(frmPleaseWaitShow));
thr.Start();
} protected void frmPleaseWaitEndShow() //继承方法,停止线程
{
if(obj.ThreadState == ThreadState.Running)
thr.Abort();
} private void frmPleaseWaitShow() //线程调用的私有方法,显示一个请等待的窗体
{
lock (this) //我怀疑问题就出在这一步,该锁什么对象才正确呢,请大家参谋一下。
{
this.formPleaseWait.Visible = false;
this.formPleaseWait.ShowDialog();
}
}
}以下是一段继承FormPubBase类的窗体 public partial class frmCar : FormBase
{
public frmCar()
{
InitializeComponent();
}
private void Car_Load(object sender, EventArgs e)
{
this.frmPleaseWaitStartShow(); //调用父类的方法
//...........
//...........执行一些要处理的东西
//............
this.frmPleaseWaitEndShow(); //调用父类的方法
}
}现在就会出现一种问题,由于加载frmCar这个窗体时调用了父类的那两个方法,有时会出现一加载frmCar这个窗体时程序就无响应了,有时候又正常。(配置高的机器出现的几率很低,配置低的机器经常出现这个问题。)在加载frmCar这个窗体时如果注释掉那两个方法就没问题,一切正常,不管配置高低的机器都行。我检查了父类那方法我就怀疑可能是lock的问题,但具体该怎么做暂时没有思路。因为很多窗体都用到了这2个方法,所以不可能把这2个方法独立开来的。大家帮忙想下怎么改。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货