我尝试了不同的解决方案,但没有运气......我不知道如何处理这个问题。以下问题:
我有一个主窗体(Form1)和一个子窗体(splashScreen)。
我的splashScreen中的代码:
public splashScreen()
{
InitializeComponent();
}
public splashScreen(Form1 frm1)
{
form1 = frm1;
InitializeComponent();
}
private static splashScreen m_instance = null;
private static object m_instanceLock = new object();
public static splashScreen GetInstance()
{
lock (m_instanceLock)
{
if (m_instance == null)
{
m_instance = new splashScreen();
}
}
return m_instance;
}
在我的Form1中,我创建了一个新线程并启动了splashScreen。我在splashScreen中调用控件的方式如下:
splashScreen splashObj = splashScreen.GetInstance();
if (splashObj.InvokeRequired)
{
splashObj.Invoke((MethodInvoker)delegate()
{
splashObj.Show();
}
);
}
else
{
splashObj.Show();
}
现在,当我的Form1正在工作时,splashScreen会启动并显示当前进程。在splashScreen上我有一个按钮"取消"。当我点击那个按钮时,我想要改变一个变量" killProc" - 在我的Form1-到" true"因此,在某些时候,可以通过return语句停止Form1中的工作" if(killProc)"返回true。
如何通过splashScreen更改Form1中的变量,还是有更好的方法?
答案 0 :(得分:0)
在GetInstance
方法中,使用splashScreen(Form1 frm1)
构造函数构造实例。他们从SplashScreen
引用了您的父级,您可以使用set属性。
public static splashScreen GetInstance(Form1 frm1)
{
lock (m_instanceLock)
{
if (m_instance == null)
{
m_instance = new splashScreen(frm1);
}
}
return m_instance;
}
所以,来自SplashScreen
form1.killProc = true;