private async void buttonSave_Click(object sender, EventArgs e) { if (folderBrowserDialog.ShowDialog() == DialogResult.OK) { var path = @Path.Combine(folderBrowserDialog.SelectedPath, $"{compressedFile.Name}.dat"); var fileStream = new FileStream(path, FileMode.Create); var d = new WriteStatusDelegate(WriteStatus); await Task.Run(() => { for (int position = 0; position < compressedFile.Data.Length; position++) { fileStream.WriteByte(compressedFile.Data[position]); if (position % 500 == 0) { labelStatus.Invoke(d, $"Salvando: {(position * 100M / compressedFile.Data.Length).ToString("0.00")} %"); } } labelStatus.Invoke(d, $"Salvando: 100 %"); return(Task.CompletedTask); }); fileStream.Close(); } }
private void FileReceiver_Load(object sender, EventArgs e) { server = new Server(); serverThread = new Thread(async() => { server.Start(); while (!server.IsStopped) { var context = await server.Listening(); var request = context.Request; var setEnabled = new SetButtonSalvarEnabledDelegate(SetButtonSalvarEnabled); buttonSalvar.Invoke(setEnabled, false); if (request.Url.AbsolutePath == "/" && request.HttpMethod == "POST") { var writeStatus = new WriteStatusDelegate(WriteStatus); string body; labelStatus.Invoke(writeStatus, "Status: Lendo corpo da requisição"); using (var reader = new StreamReader(request.InputStream, request.ContentEncoding)) { body = reader.ReadToEnd(); } labelStatus.Invoke(writeStatus, "Status: Lido corpo da requisição"); file = JsonConvert.DeserializeObject <CompressedFile>(body); if (imageExtensions.Contains(Path.GetExtension(file.Name.ToUpperInvariant()))) { var d = new PaintImageDelegate(PaintImage); pictureBoxImage.Invoke(d); } labelStatus.Invoke(writeStatus, "Status: Ações completadas com sucesso"); buttonSalvar.Invoke(setEnabled, true); } var response = context.Response; response.ContentLength64 = 0; response.StatusCode = 200; response.Close(); } server.Stop(); }); serverThread.Start(); }
public void WriteStatus(string text) { if (InvokeRequired) { WriteStatusDelegate writeStatus = new WriteStatusDelegate(WriteStatus); BeginInvoke(writeStatus, new object[] { text }); } else { tsslStatus.Text = text; } }
private void PaintImage() { var writeStatus = new WriteStatusDelegate(WriteStatus); labelStatus.Invoke(writeStatus, "Status: Descomprimindo imagens..."); var fileData = DecompressFile(file); labelStatus.Invoke(writeStatus, "Status: Imagem descomprimida com sucesso"); using (var ms = new MemoryStream(fileData)) { pictureBoxImage.Image = Image.FromStream(ms); } }
private async void buttonSalvar_Click(object sender, EventArgs e) { if (folderBrowserDialog.ShowDialog() == DialogResult.OK) { var writeStatus = new WriteStatusDelegate(WriteStatus); labelStatus.Invoke(writeStatus, "Status: Descomprimindo arquivo..."); var fileData = await Task.Run(() => DecompressFile(file)); labelStatus.Invoke(writeStatus, "Status: Arquivo descomprimido com sucesso"); var path = @folderBrowserDialog.SelectedPath; File.WriteAllBytes(@Path.Combine(path, file.Name), fileData); labelStatus.Invoke(writeStatus, "Status: Arquivo salvo com sucesso"); } }
private async void panelFile_DragDrop(object sender, DragEventArgs e) { string[] files = e.Data.GetData(DataFormats.FileDrop, false) as string[]; ICompressor compressor; if (comboBoxAlgorithm.Text.Equals("Huffman")) { compressor = new HuffmanCoding(); } else { compressor = new RunLengthEncodingCompressor(); } var file = File.ReadAllBytes(@files.First()); try { pictureBox.Hide(); panelFile.BackgroundImage = Image.FromFile(@files.First()); } catch { pictureBox.Show(); panelFile.BackgroundImage = null; } var stopWatch = new Stopwatch(); stopWatch.Start(); var task = Task.Run(() => { return(compressor.Compress(file)); }); compressedFile = await Task.Run(() => { var writeStatus = new WriteStatusDelegate(WriteStatus); int i = 0; while (!task.IsCompleted) { if (i == 500) { labelStatus.Invoke(writeStatus, $"Status: {compressor.Percentage.ToString("0.00")} % processado"); } i = (i + 1) % 501; } labelStatus.Invoke(writeStatus, $"Status: 100 % processado"); var f = task.Result; f.Name = Path.GetFileName(files.First()); return(f); }); stopWatch.Stop(); var compressionPercentage = compressedFile.Data.Length * 100M / file.Length; labelTempo.Text = stopWatch.Elapsed.ToString(@"hh\:mm\:ss\.ffff"); labelTamanho.Text = (compressedFile.Data.LongLength / 1024M).ToString("0.000") + " kb"; labelCompressionPercent.Text = $"{compressionPercentage.ToString("0.00")} %"; }