Forum » Programiranje » C# BackgroundWorker Class problem
C# BackgroundWorker Class problem
Senzacionale ::
private void btnStartCurrencyConverter_Click(object sender, EventArgs e) { if (!bwCrawler.IsBusy) bwCrawler.RunWorkerAsync(); } private void CurrencImport() { CurrencyWS.CurrencyConvertorSoapClient client = new CurrencyApp.CurrencyWS.CurrencyConvertorSoapClient(); string[] curr1 = Enum.GetNames(typeof(CurrencyWS.Currency)); string[] curr2 = Enum.GetNames(typeof(CurrencyWS.Currency)); int i = 0; int j = 0; int k = 0; foreach (var c1 in curr1) { foreach (var c2 in curr2) { try { CurrencyWS.Currency cEnum1 = (CurrencyWS.Currency)Enum.Parse(typeof(CurrencyWS.Currency), c1); CurrencyWS.Currency cEnum2 = (CurrencyWS.Currency)Enum.Parse(typeof(CurrencyWS.Currency), c2); double rate = client.ConversionRate(cEnum1, cEnum2); ICurrenciesDao currenciesDao = DaoFactory.GetCurrenciesDao(); Currencies currencyExist = currenciesDao.GetConversionRateByFromCurrencyToCurrency(c1, c2); if (currencyExist != null) { // update if row exist currencyExist.ConversionRate = Convert.ToDecimal(rate); currenciesDao.SaveOrUpdate(currencyExist); currenciesDao.CommitChanges(); lblNumberOfUpdatedRows.Text = i.ToString(); i++; } else { // write new row Currencies currencyNew = new Currencies(c1, c2, Convert.ToDecimal(rate), DateTime.Now); currenciesDao.Save(currencyNew); lblNumberofNewRows.Text = j.ToString(); j++; } txtStatus.Text = c1 + " " + c2 + ": " + rate; } catch { lblNumberofErrorRows.Text = k.ToString(); k++; } } } }
in sedaj BackgroundWorker kliče DoWork metodo
private void bwCrawler_DoWork(object sender, DoWorkEventArgs e) { CurrencImport(); }
ampak dobim napako Cross-thread operation not valid: Control 'lblNumberofErrorRows' accessed from a thread other than the thread it was created on.
Z googlom si ne morem nekam pomagati ker ne vem kako asinhrono potem klicati metodo da vmesnik ne zmrzne...
http://www.dostavahrane.si
- spremenil: Senitel ()
hendriks ::
Forma (in vsi gradniki na njej: lblNumberofErrorRows) ti laufa v svojem threadu, ti pa hočeš klicati labelo iz drugega threada,
zato ti javi error. Jaz bi naredil tako, da bi kreiral class spremenljivko/property (npr. string m_NumberOfErrorRows) in ji v catch bloku assignal k.ToString().
Potem pa bi v BGW eventu Completed (ko se ta event izvede, si že v primarnem thread-u), assignal lblNumberofErrorRows.Text = m_NumberOfErrorRows.
Takole na pamet :)
zato ti javi error. Jaz bi naredil tako, da bi kreiral class spremenljivko/property (npr. string m_NumberOfErrorRows) in ji v catch bloku assignal k.ToString().
Potem pa bi v BGW eventu Completed (ko se ta event izvede, si že v primarnem thread-u), assignal lblNumberofErrorRows.Text = m_NumberOfErrorRows.
Takole na pamet :)
Senzacionale ::
še 1 vprašanje, sedaj ne javlja napake samo na zaslon nič ne izpiše ker se zanka vedno izvaja in do BGW eventu Completed sploh ne pride. Kje moram postavit BGW da bo za vsak uspešen zankin cikler tudi na zaslon izpisalo rezultat?
Če kličem v DoWork kar celo CurrencImport metodo v posameznih zankinih korakih ne izpisuje nič...
private void bwCrawler_DoWork(object sender, DoWorkEventArgs e)
{
CurrencImport();
}
Če kličem v DoWork kar celo CurrencImport metodo v posameznih zankinih korakih ne izpisuje nič...
private void bwCrawler_DoWork(object sender, DoWorkEventArgs e)
{
CurrencImport();
}
http://www.dostavahrane.si
Senzacionale ::
hja probal sem že 4 pa noben mi ne dela, maš kak link kjer sigurno dela, zato sem v 1 postu napisal da kar probal od googla ne dela mi nič?
http://www.dostavahrane.si
hendriks ::
http://www.danielmoth.com/Blog/2004/12/...
Tole poglej. Fora je, da kličeš ReportProgress metodo, ki ti proži ProgressChanged event, v tem
eventu pa potem lahko update-aš oz. izpisuješ kar se ti dogaja sproti. Poglej si še msdn dokumentacijo.
Tole poglej. Fora je, da kličeš ReportProgress metodo, ki ti proži ProgressChanged event, v tem
eventu pa potem lahko update-aš oz. izpisuješ kar se ti dogaja sproti. Poglej si še msdn dokumentacijo.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [ASP.NET] Prenos podatkov iz ene spletne strani v drugoOddelek: Programiranje | 950 (809) | Cvenemir |
» | [C#,SQL]Oddelek: Programiranje | 1257 (1170) | JanOlMajti |
» | C# - xml import v bazoOddelek: Programiranje | 1473 (1291) | nuclear |
» | visual basic 2008 express editionOddelek: Programiranje | 1826 (1253) | sel |
» | ASPX preusmeritvena zankaOddelek: Programiranje | 2125 (2030) | Senzacionale |