C# programomban egy formról eltűnik a label. Megakad a thread, de nem szeretnék 2 szálat használni. Milyen megoldás lehetséges?
Sziasztok!
Készítek egy kis programot amellyel lehetőség van fájlokat másolni egy kiválasztott mappába. A File.Copy();-t használom ehhez. Szeretném, hogy amíg másolódnak a kiválasztott fájlok mutassak egy Dialog szerű Formot amin nemes egyszerűséggel csak egy Label van: "Másolás folyamatban". Maga a function jól működik, ha befejeződik a másolás akkor kiírja, hogy kész a másolás, de ha az elején megmutatnám ezt a kis szösszenet form-ot akkor a label text-je nincs ott, vjszont a helye az igen.
Ezt az okozza, hogy a fő szálat leakasztom a Copy idejéig? Lehetséges ezt úgy megoldani, hogy ne kelljen több szálon?
Előre is Köszönöm szépen.
FolderBrowserDialog fbd = new FolderBrowserDialog();
fbd.ShowDialog();
foreach (string item in FileContainer.SelectedItems)
{
----string selectedFileWithPath = Settings.FolderPath + "\\" + item;
----string copyToPath = fbd.SelectedPath + "\\" + item;
----File.Copy(selectedFileWithPath, copyToPath);
}
MessageBox.Show("Másolás kész");
Látod, hogy ha egy szálon vagy, befagy a GUI. Szét kell szedni.
Az, hogy most a júzernek megengeded-e hogy bizgetheti a GUI-t, egy tök másik kérés.
Sorry, most nem lesz ekezetem.
Kiprobalom, majd a DoEvents-et, de egyenlore feltennem a szalas megoldashoz a kerdesem...
Szeretnem sajat kezzel a leheto legeslegegyszerubb modon megirni a dolgot. Igy probalkoztam
Loading form = new...
Thread t = new Thread(new ThreadStarter(Copy));
t.Start();
void Copy()
{
form.dispose ha kesz.
}....
Nemtom az osszes problemat leirni, de kb ezek voltak:
Masik threadrol nem lehet controlt allitgatni, Threaden futott a masolas, de a form azonnal eltunt... ilyesmi.
Esetleg erre van valami megoldas, lehet detektalni valahogy ha kesz a thread?
Van az androidhoz hasonlo AsnycTask itt?
Tegyük fel, hogy egy junior próbál minél előbb megoldást találni egy problémára. Ennek a függvényében a következő kód mennyire helyes/helytelen?
A legfőbb kérdésem az lenne, hogy így a Thread-del mi történik? Abortolódik vagy futkos tovább?
"pasteb!n.com/aGsgnDPF"
Nem tudtam linkként csatolni:
"Sajnálom, de válaszodban nem használhatsz linkrövidítőket, mint amilyen a pastebin.com linked!
Kérlek az eredeti linket másold a rövid változat helyére!"
Nem otthoni gépemről vagyok most, ezen nincs VS, nem tudtam tesztelni, de most így ez a kód jött össze, próbáld meg működik-e:
public async Task CopyFiles(){
foreach(string item in SelectedItems){
string selectedFileWithPath = Settings.FolderPath + "\\" + item;
string copyToPath = DestinationFolder + "\\" + item;
lblCurrentCopyingFilename.Invoke(new SetFileNameLabelCallback(SetFileNameLabel), new object[] { item});
FileStream source = new File.Open(selectedFileWithPath,FileMode.Open);
FileStream dest = new File.Create(copyToPath);
await source.CopyToAsync(dest);
}
Erőltessük csak ezt az async dolgot mert hasznos csak ügyesen kell használni.
Meghívni meg úgy hogy:
Task task = new Task(CopyFiles);
task.Start();
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!