Application.Run()表单不显示

时间:2014-01-12 01:23:44

标签: c# winforms constructor

我目前正在C#中编写一些Web服务。 我启动它时唯一想要它做的就是向我显示一个GUI并立即为传入的请求打开一个等待的TcpConnection,然后将其记录到GUI并进行处理...

问题是,当我启动应用程序时,我得不到任何形式,没有控制台,没有......

像往常一样,表单由Application.Run(new Form1());

实例化

我的构造函数看起来像那样,因为我希望应用程序立即打开TcpConnection ...

    public Form1()
    {
        InitializeComponent();
        startTcpConn();
    }

我有一种感觉,等待连接会以某种方式阻止我的表格显示:(

我还尝试使用超时启动TcpConn,这没有用。 该过程在后台运行(正如您在任务管理器中看到的那样,但您无法看到表单。不在调试或发布模式下,甚至在没有VS的情况下启动它...

2 个答案:

答案 0 :(得分:0)

异步运行TCP连接方法的最简单方法是启动新任务。这将运行一个新操作并立即将控件返回给构造函数,该构造函数现在可以完成。

public Form1()
{
    InitializeComponent();
    Task.Run( ()=>startTcpConn() );
}

您需要确保新线程中的所有UI操作都将在UI线程上运行,否则您迟早会遇到跨线程异常。

答案 1 :(得分:0)

我不确定startTcpConn是什么,但我想它会打开一个连接而等待以便接收网络数据。这基本上意味着你“暂停”UI线程并且你不让它处理UI,所以它没有显示任何内容。

您应该更改代码,以便它可以在不同的线程上工作,并等待表单加载后执行此操作:

public Form1()
{
    InitializeComponent();
}

public void Form1_loaded(object sender, EventArgs e)
{
    Task.Run(() => startTcpConn());
}