C#打开窗体,然后从另外一个方法将其关闭 [英] C# Opening a Form, then closing it from another method

查看:148
本文介绍了C#打开窗体,然后从另外一个方法将其关闭的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是很新的C#和具有东西有点问题。我相信线程可能是答案,只是那是一个时髦的词在寻找解决方案时,我拿起。

 
命名空间测试
{
公共部分Form1类:表格
{
私人Form2的Form2的;

公共Form1中()
{
的InitializeComponent();
窗口2 =新Form2的();
}

私人无效runCheck(对象源,System.Timers.ElapsedEventArgs E)
{
form2.ShowDialog();
form2.TopMost = TRUE;
}

私人无效runCheckFalse()
{
form2.Hide();
}
}

这只是我剥离出来的应用程序的快速代码片段,但尝试这种我什么时候得到一个错误:跨线程操作无效:控制'窗体2从比它创建的线程以外的线程访问



作为一个方面说明我也是。使用form2.TopMost =真;尝试打开的一切的顶部的窗口,但这个往往在后面的Visual Studio等


解决方案<后面结束/ DIV>

您需要使用调用,以便与来自不同的线程的形式运行。



这是一个很好的文章,解释如何处理Windows窗体从多个线程控制:的如何:使线程安全调用Windows窗体控件



试试这个:

 命名空间测试
{
公共部分Form1类:表格
{
私人Form2的Form2的;

公共Form1中()
{
的InitializeComponent();
窗口2 =新Form2的();
}

私人无效runCheck(对象源,System.Timers.ElapsedEventArgs E)
{
如果(form2.InvokeRequired)
{
form2.Invoke(新的EventHandler(委托{form2.ShowDialog(); form2.TopMost = TRUE;}));
}
,否则
{
form2.ShowDialog();
form2.TopMost = TRUE;
}
}

私人无效runCheckFalse()
{
如果(form2.InvokeRequired)
{
form2.Invoke (新的EventHandler(委托{form2.Hide();}));
}
,否则
{
form2.Hide();
}
}
}
}


I am pretty new to C# and having a little issue with something. I believe threading may be the answer, but thats just a Buzz-Word I have picked up when looking for solutions.

namespace Test
{
    public partial class Form1 : Form
    {
        private Form2 form2;

        public Form1()
        {
            InitializeComponent();
            form2 = new Form2();
        }

        private void runCheck(object source, System.Timers.ElapsedEventArgs e)
        {
            form2.ShowDialog();
            form2.TopMost = true;
        }

        private void runCheckFalse()
        {
            form2.Hide();
        }
}

This is only a quick code snippet of my stripped out application, however when trying this I get an error: Cross-thread operation not valid: Control 'Form2' accessed from a thread other than the thread it was created on.

Also as a side note I am using form2.TopMost = true; to attempt to open the window on top of everything else, but this often ends up at the back behind Visual Studio etc

解决方案

You need to use Invoke in order to work with the form from a different thread.

Here is a nice article explaining how to work with Windows Forms controls from multiple threads: How to: Make Thread-Safe Calls to Windows Forms Controls

Try this:

namespace Test
{
    public partial class Form1 : Form
    {
        private Form2 form2;

        public Form1()
        {
            InitializeComponent();
            form2 = new Form2();
        }

        private void runCheck(object source, System.Timers.ElapsedEventArgs e)
        {
            if (form2.InvokeRequired)
            {
                form2.Invoke(new EventHandler(delegate { form2.ShowDialog(); form2.TopMost = true; }));
            }
            else
            {
                form2.ShowDialog(); 
                form2.TopMost = true;
            }
        }

        private void runCheckFalse()
        {
            if(form2.InvokeRequired)
            {
                form2.Invoke(new EventHandler(delegate { form2.Hide(); }));
            }
            else
            {
                form2.Hide();
            }
        }
    }
}

这篇关于C#打开窗体,然后从另外一个方法将其关闭的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆