好的..我的主表单由一些用户控件和一些可以打开其他表单的按钮组成。我有一个后台工作人员,其 UI 不会冻结。后台工作人员更新表单上的时钟,并检查数据库是否满足特定条件。如果满足条件,则隐藏此表单并显示新表单。
我也在检查第二个表格是否已经打开。因为一旦我打开它,我就不会关闭它。我只是使用隐藏和显示。所以我的问题是,我找不到线程安全的方式来创建和打开表单,或者如果表单已经打开则显示表单。我还必须隐藏当前表单。
这是我的代码
//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 代码如下所示:
if (inShift)
{
InShift.RefToParent = this;
InShift.ResetButtons();
InShift.Show();
//program freezes up here
this.Invoke(new ThisFormVisibleCB(ThisFormVisible), new object[] { false });
}
当我在此调用 Invoke 以隐藏表单时程序冻结..help??