/// <summary> /// DoWork непосредственно выполняющий считывание указанного в диалоге открытия файл. /// Также он отправляет файл в первый по очереди сокет /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void backgroundLoadFileWorker_DoWork(object sender, DoWorkEventArgs e) { try { fs = new FileStream(openFileDialog1.FileName, FileMode.Open); using (MemoryStream memoryStream = new MemoryStream()) { fs.CopyTo(memoryStream); memoryStream.Position = 0; MyListener list = new MyListener(); list.Sender(memoryStream, g_host, g_port); } //Thread.Sleep(1000); //чтобы успеть посмотреть //fs.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message, "File operation failed", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { fs.Close(); } }
/// <summary> /// Метод работы с сокетами. /// В каждом потоке созаётся экземпляр MyListener, который осуществляет приём и отправку полученного файла /// </summary> /// <param name="namberOfSocked"></param> private void WorkerSocket(int namberOfSocked) { MyListener list = new MyListener(); list.Receiver(g_host, g_port + (namberOfSocked - 1)); //Слушаем и получаем файл если он есть if (namberOfSocked < threadCount) //если не последний сокет { list.GetMemorystream().Position = 0; //оправить полученый файл в следующий сокет list.Sender(list.GetMemorystream(), g_host, g_port + namberOfSocked); } else { //если это последний сокет ждём и показываем на форме Thread.Sleep(2000); img = System.Drawing.Image.FromStream(list.GetMemorystream()); } }