Dzień dobry,
Jestem nowy i początkujący jeżeli chodzi o c#. Niestety chyba przypadkowo wleciałem do głębokiej wody bo chciałem zrobić prosty program okienkowy, a wyszło, że nie jest to takie oczywiste.
Program po wybraniu przycisku "Aktualizuj" musi zaktualizować i skompresować dany katalog do 7z.
W trakcie wykonywania kompresji chciałbym, aby nad przyciskiem "Aktualizuj" aktualizował się w sposób obojętne jaki pasek postępu. Głównie chodzi o to, żeby użytkownik wiedział że coś się dzieje i trzeba czekać.
Napisałem program, który faktycznie kompresuje katalog, ale zawiesza się w tym czasie i pasek postępu się nie porusza.
Pogrzebałem trochę w internecie i zrozumiałem, że trzeba to zrobić w sposób asynchroniczny żeby zadziałało.
Niestety nadal nic. Kod dość mocno przerabiałem w trakcie więc może jest trochę chaotyczny.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Windows.Forms;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Compression;
using System.Threading;
using System.Threading.Tasks;
namespace AplikacjaPakujaca
{
/// <summary>
/// Description of MainForm.
/// </summary>
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
public async void Button1Click(object sender, EventArgs e)
{
await ProcessFilesAsync();
petlapaska();
AktualizujProgres();
}
public async Task ProcessFilesAsync()
{
string sciezkapakowania = @"C:\Users\michal\Desktop\CsharpPakowanie\ZobaczymyCzyPójdzie";
string spakowanyfolder = @"C:\Users\michal\Desktop\CsharpPakowanie.7z";
Process zip = new Process();
zip.StartInfo.FileName = @"C:\Program Files\7-Zip\7z.exe";
zip.StartInfo.Arguments = "a -t7z \"" + spakowanyfolder + "\" \"" + sciezkapakowania + "\" -mx=9";
zip.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
var jakas = await Task.Run(() => zip.Start());
//zip.WaitForExit();
}
private void petlapaska()
{
for (int i = 0; ; i--)
{
Process[] procesy = Process.GetProcessesByName("7z");
if (procesy.Length > 0)
{
AktualizujProgres();
}
else
{
MessageBox.Show("zakończono");
Thread.Sleep(1000);
break;
}
Thread.Sleep(2000);
}
ProcessStartInfo otworz = new ProcessStartInfo();
otworz.FileName = @"C:\Users\michal\Desktop\CsharpPakowanie.7z";
otworz.WindowStyle = ProcessWindowStyle.Maximized;
Process otwieranie = Process.Start(otworz);
}
public void AktualizujProgres()
{
int p = 10;
progressBar1.Value = p * 1;
}
}
}