Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Application.Run()表单未显示_C#_Winforms_Constructor - Fatal编程技术网

C# Application.Run()表单未显示

C# Application.Run()表单未显示,c#,winforms,constructor,C#,Winforms,Constructor,我目前正在用C#编写一个小型Web服务。 当我启动它时,我希望它做的唯一一件事就是显示一个小GUI,并立即打开一个等待传入请求的TCP连接,然后这些请求应该被记录到GUI并由C 问题是,当我启动应用程序时,我没有得到表单,没有控制台,什么都没有 像往常一样,表单由Application.Run(newform1())实例化 我的构造函数看起来是这样的,因为我希望应用程序立即打开TcpConnection public Form1() { InitializeCom

我目前正在用C#编写一个小型Web服务。 当我启动它时,我希望它做的唯一一件事就是显示一个小GUI,并立即打开一个等待传入请求的TCP连接,然后这些请求应该被记录到GUI并由C

问题是,当我启动应用程序时,我没有得到表单,没有控制台,什么都没有

像往常一样,表单由
Application.Run(newform1())实例化

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

    public Form1()
    {
        InitializeComponent();
        startTcpConn();
    }
我有一种感觉,等待连接会在某种程度上阻碍我表单的显示:(

我还试图用一个超时来启动TcpConn,但没有用。
进程在后台运行(正如您可以在任务管理器中看到的,但您无法看到表单。未处于调试或发布模式,甚至在没有VS.的情况下启动它。

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

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

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

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

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

public Form1()
{
    InitializeComponent();
}

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

你的感觉是对的。现在打开连接还为时过早。你还需要使用某种异步模式。我已经编辑了你的标题。请参见“”,其中共识是“不,他们不应该”。显示
startTcpConn();
方法。异步执行连接操作有几个选项。感谢您的提示,这与表单事件“Showed”结合在一起非常有效。我可以看到我的UI:)但是,正如您所说,我现在无法从另一个任务中修改表单的元素。事件或工作人员是否仍然可以使用我的startTcpConn方法修改表单的元素?@user2334932您不能从ThreaPool线程更改UI控件。您需要使用Invoke让UI线程为您进行更改。下面是我的答案t写信给某人: