BackgroundWorker C# – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

BackgroundWorker C# – .NET – Fórum – Programujte.comBackgroundWorker C# – .NET – Fórum – Programujte.com

 

plasmo0
Věrný člen
16. 11. 2009   #1
-
0
-

Ahoj, ve své aplikaci se snažím použít Backgroundworker. Je jedno co to je program. Problém je následující. Mám metodu:



private void fakturyWorker_DoWork(object sender, DoWorkEventArgs e)
{
try
{
//kod - neni dulezite
//kod - neni dulezite
// - neni dulezite
for (int i = 0; i < fileNames.Length; i++)
{
if(fakturyWorker.CancellationPending)
{
e.Cancel = true;
return;
}
// - neni dulezite
FtpSpojeni.download(mess[0], mess[0], true);
int percent = (int)((i / fileNames.Length) * 100);
fakturyWorker.ReportProgress(percent,percent);
}
}
catch (Exception a)
{
MessageBox.Show(a.Message, "Hláška FTP serveru", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}


Tato událost má provést dané úkoly a voláním metody:
fakturyWorker.ReportProgress(percent,percent);


Předat události
fakturyWorker_ProgressChanged
postup pro vyobrazení na progressBar.

private void fakturyWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)

{
try
{
stav_faktury.Value = e.ProgressPercentage;
label1.Text = e.UserState.ToString();
}
catch (Exception a)
{
MessageBox.Show(a.Message, "Hláška", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}


Vše mi už funguje jak má, ale jediný háček je že se neaktualizuje progressBar ani daný label, kde může být chyba?

Nahlásit jako SPAM
IP: 82.150.166.–
Jak vzniká vynález? To všichni vědí, že je něco nemožné, a pak se objeví nějaký blázen, který neví, že je to nemožné, a udělá vynález. [br] Albert Einstein [br][br] http://plasmo.cz [br] http://bleskovaregistrace.cz [br] http://livetrading.cz
dannyk0
Věrný člen
16. 11. 2009   #2
-
0
-

Chyba je v pretypovani tady:



int percent = (int)((i / fileNames.Length) * 100);

.Lenght vraci totiz long nebo int a tak se s tim taky naklada.


5/20 = 0,25
0,25 => int nebo long => 0
0*100 = 0

Zkus to zmenit na:


int percent = (int)((i / (float)fileNames.Length) * 100.0);

A mohlo by to fungovat :)

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
plasmo0
Věrný člen
16. 11. 2009   #3
-
0
-

Ty vole já se asi pos**u :-D tak tady by mě nenapadlo hledat chybu :-) moc díky za radu

Ještě se zetpám, při stahování souboru mě to občas hodí error že zadaný soubor využívá jiný proces, jak tomu předejít a zařídít aby to ten jiny proces zrušilo a mohlo pracovat?? :-)

Nahlásit jako SPAM
IP: 82.150.166.–
Jak vzniká vynález? To všichni vědí, že je něco nemožné, a pak se objeví nějaký blázen, který neví, že je to nemožné, a udělá vynález. [br] Albert Einstein [br][br] http://plasmo.cz [br] http://bleskovaregistrace.cz [br] http://livetrading.cz
16. 11. 2009   #4
-
0
-

Pokud jsi ten soubor předtím používal ty, tak ho asi špatně uvolňuješ. Pokud ho má zamčenej jinej proces, tak s tím těžko něco uděláš.

Nahlásit jako SPAM
IP: 84.21.124.–
Dušan Janošík | web: djanosik.cz, @djanosik
plasmo0
Věrný člen
16. 11. 2009   #5
-
0
-

No použil jsem ho ve stylu stáhnout uložit a toť vše u některých souborů to je OK a některé dělají neplechu.

Nahlásit jako SPAM
IP: 82.150.166.–
Jak vzniká vynález? To všichni vědí, že je něco nemožné, a pak se objeví nějaký blázen, který neví, že je to nemožné, a udělá vynález. [br] Albert Einstein [br][br] http://plasmo.cz [br] http://bleskovaregistrace.cz [br] http://livetrading.cz
dannyk0
Věrný člen
16. 11. 2009   #6
-
0
-

A u tech, u kterych to dela neplechu to udela vzdy nebo jen obcas? Jestli treba nemaji nejaky atribut nebo prava, ktere maji problem, ale jinak plati to, co rika djanosik. Pokud ti to drzi neco jineho, tak s tim nejspis nehnes. Pokud to dela, tak bych zkusil treba 3x po sobe s nejakou casovou rezervou stahnout a pak bych hodil exception s nejakym upozornenim.

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
plasmo0
Věrný člen
16. 11. 2009   #7
-
0
-

No dělá to náhodně, prostě různé soubory.

EDIT
Když restarutuju PC tak mi to porojede cele bez problému, typuju že mi v paměti vysí mrtví vlákna, jak je zruším u backroundWorekeru?

Nahlásit jako SPAM
IP: 82.150.166.–
Jak vzniká vynález? To všichni vědí, že je něco nemožné, a pak se objeví nějaký blázen, který neví, že je to nemožné, a udělá vynález. [br] Albert Einstein [br][br] http://plasmo.cz [br] http://bleskovaregistrace.cz [br] http://livetrading.cz
dannyk0
Věrný člen
17. 11. 2009   #8
-
0
-

Vlakno pokud skonci, tak by ho mel automaticky sebrat GC. Jinak se rusi jako u vsech objektu jedine pomoci Dispose (ale nejsem si jisty, jestli dedi z IDisposable). Jediny duvod, proc by ho GC nesebral, ze se neco spatne ve vlakne uvolni a vznika tam vazba. Zkontroloval bych si spise, jestli spravne zaviram soubory apod. A taky sem jednou narazil na problem, ze mi vlakno zustalo viset, kdyz sem nezrusil prirazene eventy, takze bych to taky zkusil zkontrolovat.

Pak pokud by to porad delalo paseku, tak pak zkusit jedine nejake vypisy, ktere budou vypisovat treba v nejakem intervalu do konzole info o vlaknu a tak treba uvidis, jestli ti nejake vlakno stale bezi, i kdyz by nemelo.

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 5 hostů

Podobná vlákna

C# backgroundWorker Cancel — založil Roman

BackgroundWorker blokuje UI — založil ondrej39

BackGroundWorker zastavenie — založil Tayson

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý