Al compilar con VS, parece que el archivo "obj \ Debug \ *. Exe" no se puede copiar a "bin \ Debug \ *. Exe". El archivo "bin \ Debug \ *. Exe" está siendo utilizado por otro proceso, por lo que este proceso no puede acceder a este archivo.

Uno, el problema

Inserte la descripción de la imagen aquí
 La razón es que cuando se cierra el programa, el socket y el hilo no se cierran, lo que hace que el programa siga ejecutándose, por lo que este problema se produce la segunda vez que se inicia.
 Al escribir un programa TCP en VS, debido a que se usó la aplicación de formulario de Windows, el oyente y el hilo no se cerraron cuando el formulario se cerró directamente, lo que provocó que el servidor no se pudiera abrir durante la segunda ejecución.

Dos, la solucion

1. Manejo de errores

1.1 Cierre VS, abra el administrador de tareas, busque el exe que se estaba ejecutando antes, ciérrelo
Inserte la descripción de la imagen aquí
1.2 Busque el directorio de trabajo de VS: \ bin \ Debug * .exe, elimine el archivo exe.

ps : Si el archivo exe falla, reinicie la computadora, simple y grosero. . .

2. Corrija el error

 De hecho, este tipo de error se produjo porque el programa de la ventana se cerró directamente sin cerrar el oyente y el hilo. El hilo todavía se estaba ejecutando en segundo plano, lo que provocó que se activara la segunda vez que se activaba.
 Por lo tanto, el cierre es crucial.

2.1

Aquí, estoy usando una aplicación C # Windows Form. En la interfaz de IU, configuro el evento de cierre del formulario.
Abra la interfaz de IU, haga clic con el botón derecho en las propiedades y configure la función activada.
Inserte la descripción de la imagen aquí

2.2

Cuando el formulario esté a punto de cerrarse, si está seguro de cerrarlo, detenga el comportamiento de monitoreo de TcpListener y destruya el hilo, llame al método stop () del TcpListener y al método Abort () del hilo.

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
     DialogResult dr = MessageBox.Show("关闭服务器将无法接收到来自客户端的数据,你确定要关闭吗?", "服务器信息", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
     if (dr == DialogResult.Yes)
     {
         Listener.Stop();
         this.Thread.Abort();
         e.Cancel = false;
     }
     else
     {
         e.Cancel = true;
     }
 }

Tres, resumen

 Después de usar un determinado módulo o función, si no desea usarlo, asegúrese de cerrarlo, de lo contrario se producirán varios problemas. . . .

Supongo que te gusta

Origin blog.csdn.net/aruewds/article/details/109251314
Recomendado
Clasificación