VS编译时,出现无法将文件“obj\Debug\*.exe”复制到“bin\Debug\*.exe”。文件“bin\Debug\*.exe”正由另一进程使用,因此该进程无法访问此文件。

一、问题

VS编译时,出现无法将文件“obj\Debug\*.exe”复制到“bin\Debug\*.exe”。文件“bin\Debug\*.exe”正由另一进程使用,因此该进程无法访问此文件。_第1张图片
 原因就是关闭程序时,没有将套接字、线程关闭,导致程序仍在运行,因而第二次开始的时候会出现这种问题。
 在VS编写TCP程序的时候,因为使用的是windows窗体应用,直接关闭窗体时没有关闭监听和线程,导致第二次运行时无法打开服务器。

二、解决方案

1.处理错误

1.1 关闭VS,打开任务管理器,找到之前运行的exe,将其关闭
在这里插入图片描述
1.2 找到VS工作目录下:\bin\Debug*.exe, 将exe文件删除。

ps: 如果exe文件无法,重启电脑,简单粗暴。。。

2.解决错误

 实际上,遇到这种错误,是因为直接关闭了窗口程序,而没有关闭监听和线程,线程仍在后台运行,导致第二次开启的时候出现已被开启的状况。
 所以,关闭至关重要。

2.1

在这里,我使用的是C#的Windows窗体应用,在UI界面,设置窗体form的关闭事件。
打开UI界面,右键属性,设置触发的函数。
VS编译时,出现无法将文件“obj\Debug\*.exe”复制到“bin\Debug\*.exe”。文件“bin\Debug\*.exe”正由另一进程使用,因此该进程无法访问此文件。_第2张图片

2.2

在将要关闭窗体时,如果确定要关闭,那么停止TcpListener的监听行为和销毁线程,调用TcpListener的stop()方法和Thread的Abort()方法。

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;
     }
 }

三、总结

 在使用了某一个模块或函数后,如果不要使用了,千万要将其关闭,否则就会出现各种问题。。。。

你可能感兴趣的:(C#,c#,.net)