我目前正在C#中编写一些Web服务。 我启动它时唯一想要它做的就是向我显示一个GUI并立即为传入的请求打开一个等待的TcpConnection,然后将其记录到GUI并进行处理...
问题是,当我启动应用程序时,我得不到任何形式,没有控制台,没有......
像往常一样,表单由Application.Run(new Form1());
我的构造函数看起来像那样,因为我希望应用程序立即打开TcpConnection ...
public Form1()
{
InitializeComponent();
startTcpConn();
}
我有一种感觉,等待连接会以某种方式阻止我的表格显示:(
我还尝试使用超时启动TcpConn,这没有用。 该过程在后台运行(正如您在任务管理器中看到的那样,但您无法看到表单。不在调试或发布模式下,甚至在没有VS的情况下启动它...
答案 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());
}