好吧..我的主表单由一些用户控件和一些可以打开其他表单的按钮组成。我有一个后台工作人员,用户界面不会冻结。后台工作人员更新表单上的时钟,并且正在检查数据库是否符合某个条件。如果符合条件,则隐藏此表单并显示新表单。Form.Show()和Form.Visible ThreadSafe
我也在做一个检查,看看第二个表格是否已经打开。因为一旦我打开它,我就不关闭它。我只是使用隐藏和显示。所以我的问题是,我找不到线程安全的方式来创建和打开表单,或者如果表单已经打开,则显示该表单。我也必须隐藏当前表单。
这里是我的代码有
//bool variable to determine if i need to open the form
if (inShift)
{
frmInShift InShift = null;
if ((InShift = (frmInShift)IsFormAlreadyOpen(typeof(frmInShift))) == null)
{
InShift = new frmInShift();
InShift.RefToParent = this;
}
else
{
InShift.RefToParent = this;
}
InShift.ResetButtons();
InShift.Show();
this.Visible = false;
}
我知道这个代码的工作,我使用它在窗体上的一个按钮。我只需要使这个线程安全。部分问题实际上是在表单尚未打开时创建的。
我应该在主线程上检查吗?如果可行,我将如何调用Show()方法?
编辑: 我在我的主窗体加载事件上创建我的第二个窗体。所以我需要做的就是设置一些公共变量并显示表单并隐藏主窗体。
我RunWorkerCompleted代码看起来是这样的:当我打电话调用这个隐藏form..help
if (inShift)
{
InShift.RefToParent = this;
InShift.ResetButtons();
InShift.Show();
//program freezes up here
this.Invoke(new ThisFormVisibleCB(ThisFormVisible), new object[] { false });
}
程序冻结?