Download z HTTP + Progress Bar – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Download z HTTP + Progress Bar – C / C++ – Fórum – Programujte.comDownload z HTTP + Progress Bar – C / C++ – Fórum – Programujte.com

 

exim
~ Anonymní uživatel
37 příspěvků
17. 10. 2012   #1
-
0
-

zdravím,

mám ještě otázku jaká funkce slouží pro stahování souborů z HTTP serveru? v System::IO sem nic bohužel nenašel... Dále jak to propojit s GUI prvkem Progress Bar, kterej mi vygenerovalo Visual Studio? Je třeba otevírat nové vlákno?

Díky

Nahlásit jako SPAM
IP: 93.99.138.–
ingiraxo+15
Grafoman
17. 10. 2012   #2
-
0
-
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
exim
~ Anonymní uživatel
37 příspěvků
17. 10. 2012   #3
-
0
-

V minulém příspěvku si psal, že není nic třeba doinstalovávat, v tomto případě kdy používám .NET musim něco doinstalovávat nebo zase stačí pouze přindat knihovny?

Nahlásit jako SPAM
IP: 93.99.138.–
ingiraxo+15
Grafoman
17. 10. 2012   #4
-
0
-

ty tady nepouzivas cisty c++, ale c++/CLI, ktery používá (umožňuje) práci s .NET, takže pokud by jsi tuhle app pustil nekde, kde neni .NET, tak to nepůjde

v minulém příspěvku jsem odpovídal na čistý c++ :)

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
exim
~ Anonymní uživatel
37 příspěvků
17. 10. 2012   #5
-
0
-

Tak to je pěkně na nic :))

Nahlásit jako SPAM
IP: 93.99.138.–
ingiraxo+15
Grafoman
17. 10. 2012   #6
-
0
-

nevim co te na tom tak sere, .NET jde nainstalovat, je to otazka par MB (zde uz je lepsi C# nez c++/cli) a hlavně každej windows ho už obsahuje a pokud pouzijes specialni libku, tak posles spolecne s .exe (pripadne staticky, ale to moc nedoporucuju pokud je libka velka)

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
exim
~ Anonymní uživatel
37 příspěvků
17. 10. 2012   #7
-
0
-

Jinak zkouším to udelat podle http://msdn.microsoft.com/en-us/library/system.net.webclient.downloadprogresschanged.aspx#Y906 a stejně se mi nedaří:

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
				
				 
				 String^ sappdata = getAppData();
				 String^ patcherDir = sappdata + "\\.tcpatcher";

				 if(!existDir(patcherDir)) createDir(patcherDir);
				 
				 String^ remoteUri = "http://localhost/";
				 String^ fileName = "data.zip";
				 String^ myStringWebResource;
				 
				 WebClient^ myWebClient = gcnew WebClient();
				 myStringWebResource = String::Concat(remoteUri, fileName);
				 myWebClient->DownloadProgressChanged += gcnew DownloadProgressChangedEventHandler( DPC );
				 myWebClient->DownloadFile(myStringWebResource, fileName);
				 
			 }

	static void DPC(Object^ sender, DownloadProgressChangedEventArgs^ e) {
						int howmuch = 0;
						howmuch = (int)e->ProgressPercentage;

					}

A hází mi to chybu u myWebClient->DownloadProgressChanged += gcnew DownloadProgressChangedEventHandler( DPC ); "špatná syntax" ...

Nevíte proč?

Nahlásit jako SPAM
IP: 93.99.138.–
exim
~ Anonymní uživatel
37 příspěvků
17. 10. 2012   #8
-
0
-

Štve mě na tom to, že dělám patcher pro jednu hru a nechtel sem lidi otravovat s .net co maj ještě XPčka... Jinak bych to v C# napsal rovnou

Nahlásit jako SPAM
IP: 93.99.138.–
exim
~ Anonymní uživatel
37 příspěvků
17. 10. 2012   #9
-
0
-

Omlouvám se, středník.. :D

nicméně... Ten event je static ale progres bar je non-static... jak udelat aby ta statická metoda mohla pristupovat do naky non-static metody? konkretne aby mohla volat setBar(int cislo); diky

Nahlásit jako SPAM
IP: 93.99.138.–
ingiraxo+15
Grafoman
17. 10. 2012   #10
-
0
-

1) i windowsXP ma .NET (minimálně .NET 2.0)

2) nejde... non-static může volat static, ale obrácene ne

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
exim
~ Anonymní uživatel
37 příspěvků
17. 10. 2012   #11
-
0
-

Tak jak to vyřešit, aby ten event nastavil hodnotu v tom progressbaru?

Nahlásit jako SPAM
IP: 93.99.138.–
ingiraxo+15
Grafoman
17. 10. 2012   #12
-
0
-

proč máš vůbec statickou funkci DPC ?

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
exim
~ Anonymní uživatel
37 příspěvků
17. 10. 2012   #13
-
0
-

Ve chvíli kdy jí dám nonstatic tak to nadává

Error	1	error C3867: 'TechCraftPatcher::Form1::DPC': function call missing argument list; use '&TechCraftPatcher::Form1::DPC' to create a pointer to member	c:\users\stodulka.jakub\documents\visual studio 2008\projects\techcraftpatcher\techcraftpatcher\Form1.h	158	TechCraftPatcher


Error	2	error C3350: 'System::Net::DownloadProgressChangedEventHandler' : a delegate constructor expects 2 argument(s)	c:\users\stodulka.jakub\documents\visual studio 2008\projects\techcraftpatcher\techcraftpatcher\Form1.h	158	TechCraftPatcher

Na řádku s:

 myWebClient->DownloadProgressChanged += gcnew DownloadProgressChangedEventHandler( DPC );
Nahlásit jako SPAM
IP: 93.99.138.–
exim
~ Anonymní uživatel
37 příspěvků
17. 10. 2012   #14
-
0
-

V případě žo to budu volat takto: (this, &Form1::DPC); tak není třeba aby byla metoda statická, takže to jde..

I tak to bohužel nefunguje jak má... :/

	private: void DPC(Object^ sender, DownloadProgressChangedEventArgs^ e) {
						int howmuch = 0;
						int now = 0;
						int full = 0;
						howmuch = (int)e->ProgressPercentage;
						now = (int)e->BytesReceived;
						full = (int)e->TotalBytesToReceive;
						setBar(howmuch,now,full);
					}

	private: void setBar(int p,int now, int full) {
				 this->progressBar->Value::set(p);
			 }

Soubor se stáhne ale v progressu se nic nezmění

Nahlásit jako SPAM
IP: 93.99.138.–
ingiraxo+15
Grafoman
17. 10. 2012   #15
-
0
-

nejspíš proto, že stahování souboru je blokový a app je bloke dokud se soubor nestáhne - ani neaktualizuje bar... ale to teď tipuju, protože teď nevim jestli se ta událost vykonává asynchroně.. pokud ne, tak je to tim že máš vše v jednom vláknu

v každým případě Form se blokne při stahování

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
exim
~ Anonymní uživatel
37 příspěvků
17. 10. 2012   #16
-
0
-

Ano blokne, právě že se to nedělá asynchroně, ta možnost tam je, ale pak tam je zase plno věcí chaotickejch... Je možnost dát jen tu událost ten event do novýho vlákna? popř. jak a kde přesně to vlákno vytvářim? (Abych jich za jedno sosnutí nevytvořil třeba 200)

Nahlásit jako SPAM
IP: 93.99.138.–
exim
~ Anonymní uživatel
37 příspěvků
17. 10. 2012   #17
-
0
-

Vyřešeno...

	private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
				 //pri kliknuti na mackatko
				 //Smazeme %AppData%/.tcpatcher/*
				 //Vytvorime slozku znovu
				 //sosnem archiv
				 //Rozbalime
				 //;)
				 
				 String^ sappdata = getAppData();
				 String^ patcherDir = sappdata + "\\.tcpatcher";

				 if(!existDir(patcherDir)) createDir(patcherDir);
				 
				 String^ remoteUri = "http://localhost/";
				 String^ fileName = "data.zip";
				 String^ myStringWebResource;
				 myStringWebResource = String::Concat(remoteUri, fileName);
				 Uri ^uri = gcnew Uri(myStringWebResource);
				 
				 WebClient^ myWebClient = gcnew WebClient();
				 myStringWebResource = String::Concat(remoteUri, fileName);
				 myWebClient->DownloadProgressChanged += gcnew DownloadProgressChangedEventHandler(this, &Form1::DPC);
				 myWebClient->DownloadFileAsync(uri, fileName);
				 				
			 }
	private: void DPC(Object^ sender, DownloadProgressChangedEventArgs^ e) {
						int p = 0;
						int now = 0;
						int full = 0;
						p = (int)e->ProgressPercentage;
						now = (int)e->BytesReceived;
						full = (int)e->TotalBytesToReceive;
						
						this->progressBar->Value::set(p);
						this->info->Text = "Stahuji "+(now/1024)+"Kb / "+(full/1024)+"Kb";
					}
Nahlásit jako SPAM
IP: 93.99.138.–
ingiraxo+15
Grafoman
17. 10. 2012   #18
-
0
-

však můžeš použít async funkci - DownloadFileAsync .. více info přímo v doc. msdn a pokud tu funkci napíšeš do googlu tak opět plno výsledků / ukázek

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
exim
~ Anonymní uživatel
37 příspěvků
17. 10. 2012   #19
-
0
-

áánoo už sem psal vyřešeno s async ;) Díky

Nahlásit jako SPAM
IP: 93.99.138.–
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, 9 hostů

Podobná vlákna

Progress bar — založil lot

Progress bar (OpenGL) — založil gaben

Jak otočit progress bar — založil Hula

Progress bar vo webovej aplikácií ... — založil Anonymní uživatel

Moderátoři diskuze

 

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