1、在Form2这个窗体里面,就是你的d窗体,加一个属性public string ISOK = ""放在类里中(不是方法中,是类的字段)。
2、在Form2的FormClosed 事件里改一下定义的ISOK这个属性的值,其实就是个标识,告诉主窗体,d窗体已经关了。就一句就行了:this.ISOK = "OK"
3、可以在Form2中定义一个Timer,窗体加载完成后启动这个Timer。他的作用就是5秒(你自己定几秒)后关了自己。
4、在主Main窗体,你要d窗体的地方写线程委托吧。例子就写在Load里面了。
private void Form1_Load(object sender, EventArgs e)
{
Form2 f2 = null, f3 = null //这就是A、Bd窗了
//开第一个小d窗体的线程,但并不启动,我们还要定义第二个d窗体线程
var AForm = new System.Threading.Thread((System.Threading.ThreadStart)delegate
{
BeginInvoke((MethodInvoker)delegate
{
f2 = new Form2()
f2.Text = "C" //这个Text赋值没意义,我只是区别一下。
f2.Show()
})
})
//开第二个d窗体线程
var BForm = new System.Threading.Thread((System.Threading.ThreadStart)delegate
{
BeginInvoke((MethodInvoker)delegate
{
//看到这个ISOK的标记了吗?也就是说第二个线程在运行时,会等这个标识变成OK才向下运行,不管你是计时器到了关闭,还是自己手动关,总之标记变了,这个循环就结束。
while (f2.ISOK != "OK")
{
Application.DoEvents()
}
f3 = new Form2()
f3.Text = "D"
f3.Show()
})
})
//开两个线程
AForm.Start()
BForm.Start()
}
最后,我的方法绝对不是完全合理的,如果有更好的方法,也希望各位多指导一二。其实也有不用线程的方法。也就是不停的监控第一个d窗的标记量。
另:你的判定我没有管,你如果要只d出B,这个程序肯定是不行的了。我只是做了顺序d出两窗体,你可以在委托中把条件加上去就可以了。
方法/步骤分步阅读1
在电脑桌面的右下角,点击360安全卫士小图标,打开其主界面。
2
点击“功能大全”专栏,选择“数据安全”,从列表中找到“d窗过滤”选项,点击打开。
3
在d窗过滤器中,点击右上角的“添加d窗”。
4
在d出的页面中选择会产生d窗的应用, 点击开启过滤。
5
回到d窗过滤器页面中,可以杳看到已添加的应用条目,和拦截d窗的记录。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)