c#程序在关闭窗体后继续在进程中运行

本文关键字:继续 进程 运行 窗体 程序 | 更新日期: 2023-09-27 18:19:10

最近,当使用我的TCP/IP服务器和客户端时,我注意到它们在我关闭它们后都在进程中保持打开状态。

我通过将套接字分配给服务器来修复客户端保持打开状态,这会关闭框架后台的所有异步线程。

但是,当尝试对服务器这样做时,无论我做什么,进程都保持打开状态。

假设TCP/IP服务器正在处理它自己的东西,在这段代码中还有其他东西可以保持进程打开吗?

编辑:更新:如果我在应用程序后面放置一个断点。在Program.cs中运行(new ServerForm())行,一旦我按exit或调用Application.Exit(),它将中断。

我不知道它在挂起程序,但是它没有退出Main。

namespace ChatServer
{
    public partial class ServerForm : Form
    {
        private NetLib.Server _server = new NetLib.Server();
        public delegate void ClientConnection(ServerNetworkState ns);
    public ServerForm()
    {
        InitializeComponent();
    }
    private void ServerForm_Load(object sender, EventArgs e)
    {
        //Set up server IP and Port #.
        _server.Ip = "127.0.0.1";
        _server.Port = 5001;
        //Setup events for success/error checking
        _server.NewConnection += new NetLib.Server.NetworkStateEventHandler(_server_NewConnection);
        _server.Started += new NetLib.Server.ServerEventHandler(_server_Started);
        _server.Initialized += new NetLib.Server.ServerEventHandler(_server_Initialized);
        _server.BindFailure += new NetLib.Server.ServerEventHandler(_server_BindFailure);
        _server.BindSuccess += new NetLib.Server.ServerEventHandler(_server_BindSuccess);
        //Initialize Server and add neccesary commands
        _server.Initialize();
        //Clients will call sendmessage on the server,
        //and the server will send the message to the neccesary clients.
        _server.MessageEncoder.FriendlyCommands.Add("sendmessage", SendMessage);
    }
    public void SendMessage(short sender, short[] recipients, string text)
    {
        _server.MessagePump.Enqueue(new Packet(-1, recipients, "receivemessage", text));
    }
    void _server_BindSuccess()
    {
        //Log Bind Success at DateTime.Now
    }
    void _server_BindFailure()
    {
        //Log Bind Failure at DateTime.Now
    }
    void _server_Initialized()
    {
        //Log Initialized at DateTime.Now
    }
    void _server_Started()
    {
        //Log Started at DateTime.Now
    }
    void _server_NewConnection(NetLib.ServerNetworkState ns)
    {
        //Log New Connection with ns.Ip at DateTime.Now
        BeginInvoke(new ClientConnection(AddClientToControl), ns);            
    }
    private void AddClientToControl(NetLib.ServerNetworkState ns)
    {
        listBox1.Items.Add("ID: " + ns.Id + " IP: " + ns.Ip);
    }
    private void startServer_Click(object sender, EventArgs e)
    {
        _server.Start();
    }
    private void ServerForm_FormClosing(object sender, FormClosingEventArgs e)
    {
        _server.Dispose();
    }
}

}

c#程序在关闭窗体后继续在进程中运行

NetLib.Server.Dispose()是否处理所有的'shutdown'操作?在。net框架中,. close()经常调用dispose(),但. dispose()不调用close操作。

发现库中有一个线程被忽略了。

回答这个问题:上面的代码中没有任何东西导致上面所述的问题。这是一个在Netlib库中打开的线程,在处理和关闭任何打开的连接时从未处理过。