Zdravím,
Nevíte proč mi zamrzá program i když mám funkci puštěnou v novým threadu?
private void Install()
{
getLabelPercent.Invoke(new Action(() => getLabelPercent.Text = "Instaluji ..."));
Core.Unrar unrar = new Core.Unrar();
String zip = @"" + Path.GetDirectoryName(Application.ExecutablePath) + "\\tmp\\" + getFileName;
getLabelPercent.Invoke(new Action(() => getLabelPercent.Text = unrar.Extract(zip, Core.PublicVariable.UltimaOnlinePath, getProgress, getLabelPercent, setAddText)));
}
Takhle pouštím
Thread newThread = new Thread(Install);
newThread.Start();
Core.Registry.add2Registry("Path", Core.PublicVariable.UltimaOnlinePath);
A Unrar vypadá takto
public String Extract(String file, String destination)
{
var archive = ArchiveFactory.Open(file);
pBar.Invoke(new Action(() => pBar.Maximum = archive.Entries.Count()));
foreach(var entry in archive.Entries)
{
entry.WriteToDirectory(destination, ExtractOptions.ExtractFullPath | ExtractOptions.Overwrite);
rtb.Invoke(new Action(() => rtb.AppendText(entry.FilePath + Environment.NewLine)));
rtb.Invoke(new Action(() => rtb.Select(rtb.Text.Length, 1)));
pBar.Invoke(new Action(() => pBar.PerformStep()));
}
return "Nainstalováno ...";
}
Nenechte se zmát počtem parametrů tohle je přímo funkce pro unrar, tamta je přímo pro nastavení komponentu aa následně spuštění této.
A ten nový thread puštím v události při kompletním stáhnutí souboru.