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

Igor – .NET – Fórum – Programujte.comIgor – .NET – Fórum – Programujte.com

 

Problem s vlakny
~ Anonymní uživatel
1 příspěvek
3. 12. 2009   #1
-
0
-

Dobry den,

potreboval bych poradit delam program jehoz jedna funkcnost je hledani souboru napsal jsem si na to vlastni tridu protoze chci hledani spoustet na extra vlaknu:

class FileSearch

{
private string _directoryPath;
private string _searchPattern;
private TextBox _outputTextbox;

public FileSearch(string directoryPath, string searchPattern, TextBox outputTextbox)
{
this._directoryPath = directoryPath;
this._searchPattern = searchPattern;
this._outputTextbox = outputTextbox;
}

public void StartSearch()
{
try
{
DirectoryInfo directoryInfo = new DirectoryInfo(_directoryPath);

DirectoryInfo[] directories = directoryInfo.GetDirectories();
foreach (DirectoryInfo dir in directories)
{
FileSearch fs = new FileSearch(dir.FullName, _searchPattern, _outputTextbox);
fs.StartSearch();
}


FileInfo[] files = directoryInfo.GetFiles(_searchPattern);
foreach (FileInfo file in files)
{
_outputTextbox.Text += String.Format("{0}\r\n", file.FullName);
}
}
catch (Exception e)
{
System.Windows.Forms.MessageBox.Show(e.Message);
}
}
}


spoustim to takto:

FileSearch fs = new FileSearch(_folderPath, _mask, txt_result);

Thread t = new Thread(fs.StartSearch);
t.Start();


ale kdyz to spustim tak dostanu chybu:

The calling thread cannot access the object because different thread owns it.

Nevite jak to vyresit?

Dekuji za odpoved

Nahlásit jako SPAM
IP: 89.176.252.–
Chrasty
~ Redaktor
+4
Posthunter
3. 12. 2009   #2
-
0
-

Po letmém shlédnutí kódu hádám, že za to může to, že přistupuješ k ovládacímu prvku ze sekundárního vlákna. Můžeš využít BackgroundWorker nebo metodu Invoke, viz články tady na Programujte.

Hází to chybu na tomhle řádku, že?

_outputTextbox.Text += String.Format("{0}\r\n", file.FullName);

Nahlásit jako SPAM
IP: 193.179.196.–
Igor
~ Anonymní uživatel
17 příspěvků
3. 12. 2009   #3
-
0
-

no ono to prave nepise na kterym radku ale vyhodi to messagebox s tou hlaskou co jsem psal:(

Nahlásit jako SPAM
IP: 89.176.252.–
Igor
~ Anonymní uživatel
17 příspěvků
3. 12. 2009   #4
-
0
-

ale ano mas pravdu kdyz jsem zakomentom ten radek a spustil to tak to nepise tak jdu studovat clanky diky

Nahlásit jako SPAM
IP: 89.176.252.–
Chrasty
~ Redaktor
+4
Posthunter
3. 12. 2009   #5
-
0
-

Vlož k tomu řádku breakpoint, dozvíš se víc informací a uvidíš, že až k tomu řádku to proběhne v pořádku.

Nahlásit jako SPAM
IP: 193.179.196.–
Igor
~ Anonymní uživatel
17 příspěvků
3. 12. 2009   #6
-
0
-

tak jsem to teda upravil ze v hlavnim formu pouzivam backgrounworker:

FileSearch fs = new FileSearch(_folderPath, _mask, txt_result);

bw.DoWork += bw_DoWork;
bw.RunWorkerAsync(fs);

void bw_DoWork(object sender, DoWorkEventArgs e)
{
((FileSearch)e.Argument).StartSearch();
}


ale porad mi to pise tu samou chybu?:(

Nahlásit jako SPAM
IP: 89.176.252.–
Amertak
~ Anonymní uživatel
112 příspěvků
9. 12. 2009   #7
-
0
-

nechce-li se ti to moc řešit, mám možná jednodužší řešení, není sice bezpečnější, ale mělo by fungovat :)

CheckForIllegalCrossThreadCalls = false;

Nahlásit jako SPAM
IP: 80.251.245.–
dannyk0
Věrný člen
10. 12. 2009   #8
-
0
-

Zkus pouzit invokovani:



Invoke((MethodInvoker)(delegate() {
... kod, ktery ma zmenit neco v gui...
));

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 :)
daniik
~ Anonymní uživatel
5 příspěvků
14. 12. 2009   #9
-
0
-

Pri pouziti background workeru nastavuj tu property v udalosti "report progress" ci jak se jmenuje pak to vyjimku nehodi

Nahlásit jako SPAM
IP: 194.213.32.–
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ů

 

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