このコードは、バックグラウンド ワーカーを使用して並列にスレッドを使用してソケットから画像を読み取っています。新しいイメージに同じソケットを再利用したいのですが、次のエラーが発生します。
*エラー : 別のプロセスで使用されているため、プロセスはファイル "D:\image 1.png にアクセスできません *
つまり、私の考えは、前のプロセスを強制終了し、同じソケットで新しいプロセスを開始することです。
enter code here
名前空間 ScreenCapture { public partial class Form1 : Form { String ipaddress; public Form1() { InitializeComponent(); backgroundWorker1.WorkerReportsProgress = true; }
private void button1_Click(object sender, EventArgs e)
{
ipaddress=textBox1.Text;
try
{
TcpClient client = new TcpClient(ipaddress, 5000); // create the client socket and connect to port number 5000
Stream s = client.GetStream(); // create the object of stream and assign client socket stream
StreamWriter sw = new StreamWriter(s);
StreamReader sr = new StreamReader(s);
sw.AutoFlush = true; // auto flush the stream writer
sw.WriteLine("Send");
client.Close();
s.Close();
Thread.Sleep(15000);
backgroundWorker1.RunWorkerAsync();
}
catch (Exception ee)
{
MessageBox.Show(ee.ToString());
}
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 1; i < 10; i++)
{
try
{
TcpClient client = new TcpClient(ipaddress, 5001); // create the client socket and connect to port number 5000
Stream s = client.GetStream(); // create the object of stream and assign client socket stream
StreamWriter sw = new StreamWriter(s);
sw.AutoFlush = true;
sw.WriteLine(i.ToString());
client.Close();
s.Close();
Thread proces = new Thread(delegate()
{
int portno = 5001 + i;
int j = i;
// MessageBox.Show(portno.ToString());
TcpClient clientt = new TcpClient(ipaddress,portno); // create client socket and connect to prot number 5000
using (var stream = clientt.GetStream()) // create the stream variable
using (var output = File.Create("D:\\img"+j+".png")) // create variable output
{
var buffer = new byte[1024]; // crfeate variable buffer of length 1024
int bytesRead;
while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0) // get the number of bytes from stream and greater then
{
output.Write(buffer, 0, bytesRead);
}
}
backgroundWorker1.ReportProgress(j);
clientt.Close();
return;
});
proces.Start();
Thread.Sleep(5200);
}
catch (Exception ee)
{
MessageBox.Show(ee.ToString());
}
if (i == 9)
i = 0;
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
this.SuspendLayout();
pictureBox1.Image = new Bitmap(@"D:\\img" +e.ProgressPercentage + ".png");
if (File.Exists(@"D:\\img" + (e.ProgressPercentage - 1).ToString() + ".png"))
{
File.Delete(@"D:\\img" + (e.ProgressPercentage - 1).ToString() + ".png");
}
this.ResumeLayout();
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}