Strašno! Samo odjednom pocelo, ako tko slucajno zna sto ovo znaci.
Attempted to read or write protected memory. This is often an indication that other memory is corrupt. (znam i ja prevest, ali pitam zasto se dogodilo)
Hvala
C# - Problemi i rješenja
- poruka: 2.151
- |
- čitano: 706.239
- |
- moderatori:
Lazarus Long, XXX-Man, vincimus
- +/- sve poruke
- ravni prikaz
- starije poruke gore
Umjesto MSSQLa koristi SQLite - single file SQL bazu koja ne treba server. Jedini je problem što je samo taj PC može koristiti - da bi ju koristilo više računala, moraš ju ili staviti u shareani folder (tu onda moraš riješit problem sa lockanjem zapisa) ili staviš MSSQL/MySQL server.
Nego, da ja vas pitam - znam da nitko ne voli Mono ni MonoDevelop ali jel možda netko slučajno zna kako ovo ubaciti kao referencu? To je widget za DataGridView (kojeg inače nema) i za 2D grafove. Zgodno stvarčica ali ja nikako skužiti kako to ubaciti u projekt. Nisam na Linuxu nego na Windowsima 7.
moje gluposti
sredio sam, na krivom mjestu sam zatvorio pa se u memoriju previse puta loado sliku (1200 puta u sekundi), svejedno hvala
Pozdrav. Odlučio sam naučiti C#, nemam baš neka velika iskustva s programiranjem pa se nadam da to neće biti neka velika prepreka kod učenja ovog jezika(?). Sad mi je najveći problem IDE... Visual Studio se plaća koliko vidim pa jel mi možete reći koji da si skinem/koristim.
Za knjige sam prvo odabrao ovo
http://www.amazon.com/Beginning-Visual-2010-Wrox-Programmer/dp/0470502266
pa ću preći na
http://www.amazon.com/Pro-NET-Framework-Professional-Apress/dp/1430242337
Yay or nay?
Svaki Visual Studio ima Express inačicu koja je besplatna. Uzmi VS2012 Express.
Što se tiče knjiga, ovu prvu nemoj nego nađi Beginner's C# od Wroxa pa onda ovu drugu (ili Professional C# od Wroxa). Ili Head First C# (odličan serijal knjiga, baš za početnike).
[edit] - koji sam ja idiot, link iznad je ispravan, ja sam nešto krivo razumio . Prva knjiga je ok, umjesto druge stoji preporuka za ovu gore navedenu a kao zamjena za prvu može poslužiti ova Head First. Isprike zbog brzanja
Već sam i instalirao Express inačicu i odmah mi se pojavio prozor u kojem je pisalo da je ovo trial verzija koja traje 30 dana pa me to zbunilo... Hvala.
Da, moraš se registrirati (besplatno) i dobiješ ključ na mail.
Počeo sam učitit C# (prelazak s C++), i imam jedan problem. Zanima me kako da pozovem non - static metodu iz static Main - a
Konkretno?
Metod koji nije statički, pozivaš tako da instanciraš objekt klase čiji je to metod, pa onda pozoveš metod.
Da li pozivaš metod svoje klase ili iz .NET-a?
Recimo WriteLine je statički metod klase Console i ne trebaš instancirati objekt.
Koristio sam svoju metodu koja se nalazi unutar iste klase s Main metodom. Kada sam instancirao klasu i onda pozvao metodu, proradilo je
Pozdrav, imam problem koji mi zagorčava život posljednjih 3 dana, e ovako:
Imama DataGridView i imam neke unose, e sad mi je potrebno da nađem određeni string unešen u textbox i da mi prebroji koliko ima redova u datagridview sa tim određenim stringom, ja uspijem naći taj string, ali mi je problem prebrojati te redove.
Ovako nekako:
int brojac = 0;
foreach (DataGridRow in grid.Rows)
{
if (row[stupac].Value.ToString() == neki_string)
{
brojac++
}
else{}
}
tako nekako, ovo je napamet napisano. DataRow ne možeš koristiti na gridu nego ti treba baš DataGridRow (mislim da se tako zove). Postoji i druga opcija - sa EFom pretraži datasource od grida i prebroji rezultate tog dataseta ili tablice. Ono gore možeš primjeniti direktno na DataTableu koji filla taj grid, samo ga prepravi na DataRow.
A možeš i prepraviti SELECT koji dohvaća rezultate za grid (ako koristiš SQL bazu) da dohvaća samo one retke koji imaju traženi string iz txtboxa i onda samo prebrojiš retke u DataTable.
Ako se grid puni na neki drugi način, možeš ga dumpati u novu DataTable ali to ti je sporo, komplicirano i šampionski . Sve ti ovisi o tome odakle fillaš grid.
Ja imam sličan problemčić - DataAdapter napuni DataTable i prikaže ga u gridu. Retke u gridu treba pobojati ovisno o jednoj vrijednosti u retku... A pretraživač je parcijalni, google-like pa to ima tendenciju da se zablokira bez ikakvog posebnog razloga... Korisnik upisuje vrijednost u txtbox, dataadapter se spoji na sql server i sa %like% pretražuje 14 stupaca. Vrati vrijednost i nafilla grid. E sada bi trebalo pobojati redak ako jedan od stupaca (koji nije u ovih 14) ima vrijednost 1.
Kako je to poprilično spora operacija (if-anje u foreach petlji po cijelom gridu ili DTu, nebitno), aplikacija se smrzne kad korisnik počne tipkati dalje po txtboxu... Glup problem i ne pada mi na pamet ništa osim izdvanjanja bojanja u drugi thread i nekakav queue koji neće dati gridu da se refresha sa novim podacima dok "bojanje" ne završi. Katastrofa -.-
Na test bazi, samo slovo "d" povuče 1400 rezultata. Dok ovaj jadnik vidi koji od tih ima "1" u stupcu broj 19, user je već napisao "da" i eto novih ~900 rezultata za grid. Ovaj još nije ni prvih 300 provjerio...
Problem je što mi se datgridview puni sa podacima iz textboxsova, i snima u bazu podataka, eh sad nema ograničenja, znači u pitanju su osobe koje se unose sa JMBG i znači može samo jedan user ali može se unositi više puta jedan user, tj. što hoću da kažem ako user ne postoji u datagridview treba da izbaci njegove podatke i da piše da je prijavljen, a ako već postoji da piše odjavljen, i tako da se ponavlja, zao sam zamislio da prebrojim korisnika u datagridview i da za svaki neparni broj kaže prijavljen, a za paran odjavljen, nadam se da si skontao šta pišem, jer i meni nije baš najjasnije :).
Ovako mi ide do sada i funkcioniše samo 1 i 2 puta, a za ostale ne, jer svaki idući put pše mi da je odjavljen.
bool jmbgRadnika = false;
foreach (DataGridViewRow red in DGVPrijavaOdjava.Rows)
{
string radnikLogiran = Convert.ToString(red.Cells[1].Value);
if (radnikLogiran == txtJMBGRadnika.Text)
{
jmbgRadnika = true;
}
}
if (jmbgRadnika)
{
DGVPrijavaOdjava.Rows.Add(odjavljen, txtJMBGRadnika.Text, txtImeRadnika.Text, txtPrezimeRadnika.Text, lblVrijeme.Text);
vrijemeOdjava.InsertOdjavaByJMBG(lblVrijeme.Text, lblDatum.Text, txtJMBGRadnika.Text);
}
else
{
DGVPrijavaOdjava.Rows.Add(prijavljen, txtJMBGRadnika.Text, txtImeRadnika.Text, txtPrezimeRadnika.Text, lblVrijeme.Text);
vrijemePrijava.InsertPrijavaByJMBG(lblVrijeme.Text, lblDatum.Text, txtJMBGRadnika.Text);
}
Hvala na brzom odgovoru ;)
Ovako nekako:
int brojac = 0;
foreach (DataGridRow in grid.Rows)
{
if (row[stupac].Value.ToString() == neki_string)
{
brojac++
}
else{}
}
int brojac = 0;
foreach (DataGridViewRow row in DGVPrijavaOdjava.Rows)
{
if (row.Cells[1].Value.ToString() == txtJMBGRadnika.Text)
{
brojac++;
}
}
if (brojac % 2 == 0)
{
DGVPrijavaOdjava.Rows.Add(prijavljen, txtJMBGRadnika.Text, txtImeRadnika.Text, txtPrezimeRadnika.Text, lblVrijeme.Text);
}
else
{
DGVPrijavaOdjava.Rows.Add(odjavljen, txtJMBGRadnika.Text, txtImeRadnika.Text, txtPrezimeRadnika.Text, lblVrijeme.Text);
}
Hvala ti riješio sam..HVala pravi si:)
Ajmo gospodo, bilo bi dosta prežderavanja sa tim odojcima, imajte milosti . Treba netko nešto i raditi u ovoj državi. Od 27.12 kreće probno fiskalizacija, neki (MSGW-Ugowin-GRC-tko već) su isporučili update za svoju kasu, na računima već piše "Kasa nije fiskalizirana" i prazno nakon "JIR" (očekuje se ista situacija narednih mjesec dana ako je za vjerovati pričama o "pripremljenosti" porezne).
Na stranu o veseljima sa fiskalizacijom, ja imam jedan problem - gore sam već pisao ali nitko me nije doživio (možda zato jer je bio Badnjak/Božić?). Ja ću izgleda doktorirati pretraživače i GridViewe -.-
Dakle, DataAdapter napuni DataTable i prikaže ga u gridu. Retke u gridu treba pobojati ovisno o jednoj vrijednosti u retku... A pretraživač je parcijalni, google-like pa to ima tendenciju da se zablokira bez ikakvog posebnog razloga... Korisnik upisuje vrijednost u txtbox, dataadapter se spoji na sql server i sa %like% pretražuje 14 stupaca. Vrati vrijednost i nafilla grid. E sada bi trebalo pobojati redak ako jedan od stupaca (koji nije u ovih 14) ima vrijednost 1.
Kako je to poprilično spora operacija (if-anje u foreach petlji po cijelom gridu ili DTu, nebitno), aplikacija se smrzne kad korisnik počne tipkati dalje po txtboxu... Glup problem i ne pada mi na pamet ništa osim izdvanjanja bojanja u drugi thread i nekakav queue koji neće dati gridu da se refresha sa novim podacima dok "bojanje" ne završi. Katastrofa -.-
Na test bazi, samo slovo "d" povuče 1400 rezultata. Dok ovaj jadnik vidi koji od tih ima "1" u stupcu broj 19, user je već napisao "da" i eto novih ~900 rezultata za grid. Ovaj još nije ni prvih 300 provjerio...
Jel netko ima neki smisleni prijedlog ili čak rješenje?
Ajmo gospodo, bilo bi dosta prežderavanja sa tim odojcima, imajte milosti . Treba netko nešto i raditi u ovoj državi. Od 27.12 kreće probno fiskalizacija, neki (MSGW-Ugowin-GRC-tko već) su isporučili update za svoju kasu, na računima već piše "Kasa nije fiskalizirana" i prazno nakon "JIR" (očekuje se ista situacija narednih mjesec dana ako je za vjerovati pričama o "pripremljenosti" porezne).
Na stranu o veseljima sa fiskalizacijom, ja imam jedan problem - gore sam već pisao ali nitko me nije doživio (možda zato jer je bio Badnjak/Božić?). Ja ću izgleda doktorirati pretraživače i GridViewe -.-
Dakle, DataAdapter napuni DataTable i prikaže ga u gridu. Retke u gridu treba pobojati ovisno o jednoj vrijednosti u retku... A pretraživač je parcijalni, google-like pa to ima tendenciju da se zablokira bez ikakvog posebnog razloga... Korisnik upisuje vrijednost u txtbox, dataadapter se spoji na sql server i sa %like% pretražuje 14 stupaca. Vrati vrijednost i nafilla grid. E sada bi trebalo pobojati redak ako jedan od stupaca (koji nije u ovih 14) ima vrijednost 1.
Kako je to poprilično spora operacija (if-anje u foreach petlji po cijelom gridu ili DTu, nebitno), aplikacija se smrzne kad korisnik počne tipkati dalje po txtboxu... Glup problem i ne pada mi na pamet ništa osim izdvanjanja bojanja u drugi thread i nekakav queue koji neće dati gridu da se refresha sa novim podacima dok "bojanje" ne završi. Katastrofa -.-
Na test bazi, samo slovo "d" povuče 1400 rezultata. Dok ovaj jadnik vidi koji od tih ima "1" u stupcu broj 19, user je već napisao "da" i eto novih ~900 rezultata za grid. Ovaj još nije ni prvih 300 provjerio...
Jel netko ima neki smisleni prijedlog ili čak rješenje?
Prvo budi siguran da ti je tablica pravilno indeksirana. Sa dobrim indeksima pretraživanje goleme količine podataka nije nikakav problem. Ono što je problem (a to si već sam uočio) je stopiranje već pokrenute pretrage onog trena kad se filter promjenio. Ono što ti sigurno može pomoći je pretraživanje DataTable objekta umjesto %like% na sql-u. Dakle pretraživat ćeš po memoriji klijenta umjesto pokretanja query-ja na serveru. DataTable ima Select metodu pa provjeri.
E sad, i dalje ostaje problem zaustavljanja već pokrenute pretrage. Preporučam ti da posao odradiš sa Task klasom. U metodu za pretragu proslijedi CancelationToken i provjeravaj njegovo stanje npr unutar for petlje. Ako je zatražen prekid (zbog promjenjenog filtera) samo izleti van iz metode i pokreni ju opet sa novim filterom (koristeći isti Task objekt). Na taj način ti textbox neće biti blokiran (pretraga se vrši u drugom threadu) i moći ćeš vrlo brzo prekinuti pretragu.
Ako budeš i dalje imao problem daj malo više nekih detalja pa ćemo naći način da to riješimo.
Task je u .net 4 i višem? Ja sam na 3.5.
Što se tiče samog pretraživanja, sql upit je samo za 4 uvjeta - prefiks, ime, srednje ime, prezime sa like operatorom. Mislim da to nije problem.
Kao što ti kažeš, idući filter je taj 0 ili 1 koji tražim u DTu na određenom stupcu i on određuje boju retka.
To ću preselit u novi thread pa ćemo vidjet kako to radi. Tnx na savjetu!
[edit] sad vidim da sam gore napisao da ih pretražuje 14. Nije ih toliko, samo su 4. U DT ih vrati 19 u grid i br.17 je taj sporni 1 ili 0 koji ne ovisi o txtboxu tj. nije bitan za pretragu nego je samo uvjet za bojanje retka.

Isprike na double postu ali imam problem
Cross-thread operation not valid: Control 'partner_grid' accessed from a thread other than the thread it was created on. Ne dozvoljava mi mijenjati grid jer je stvoren u drugom threadu... Negdje je glup propust ali ja ne vidim di
public static Thread search_sql_thread;
public static Thread search_grid_thread;
public static ManualResetEvent mr1 = new ManualResetEvent(false);
private void textBox2_TextChanged(object sender, EventArgs e)
{
search_sql_thread = new Thread((ThreadStart)delegate
{
DataTable sql_dt = new DataTable();
DataSet sql_ds = new DataSet();
SqlConnection sql_conn = new SqlConnection();
SqlCommand sql_cmd = new SqlCommand();
SqlDataAdapter sql_adapter = new SqlDataAdapter();
string select = String.Format("SELECT * from partneri_t WHERE ((prefiks LIKE '%{0}%') OR (ime LIKE '%{0}%') OR (srednje_ime LIKE '%{0}%') OR (prezime LIKE '%{0}%') OR (nastavak LIKE '%{0}%') OR (adresa LIKE '%{0}%'))", textBox2.Text);
try
{
postavke.ReadSetting();
sql_conn = new SqlConnection(postavke.connString);
sql_conn.Open();
sql_cmd = new SqlCommand(select, sql_conn);
sql_adapter = new SqlDataAdapter(sql_cmd);
sql_adapter.Fill(sql_ds);
sql_conn.Close();
sql_dt = sql_ds.Tables[0];
}
catch (Exception ex)
{
error_handler.ErrorText(ex.ToString(), "SQL SELECT error");
MessageBox.Show("SQL baza nedostupna!", "SQL Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
partner_grid.DataSource = sql_dt;
partner_grid.Columns[1].Visible = false;
partner_grid.Columns[2].Visible = false;
partner_grid.Columns[3].Visible = false;
partner_grid.Refresh();
mr1.WaitOne();
});
search_grid_thread = new Thread((ThreadStart)delegate
{
OznaciPartnere();
mr1.Set();
});
search_sql_thread.Start();
search_grid_thread.Start();
}
public void OznaciPartnere()
{
foreach (DataGridViewRow row in partner_grid.Rows)
{
string RowType = row.Cells[19].Value.ToString();
if (RowType == "1")
{
row.DefaultCellStyle.BackColor = Color.Yellow;
//row.DefaultCellStyle.ForeColor = Color.White;
}
else if (RowType == "0")
{
//
}
}
}
Dakle, pokupi string iz txtboxa, opali query "select", popuni grid, pogledaj tko u gridu ima "1" u stupcu 19 i pobojaj u žuto ako ima... Piece of cake. BTW, indexiranje je poprilično pomoglo. Da, znam, ADO.Net rules
Isprike na double postu ali imam problem
Cross-thread operation not valid: Control 'partner_grid' accessed from a thread other than the thread it was created on. Ne dozvoljava mi mijenjati grid jer je stvoren u drugom threadu... Negdje je glup propust ali ja ne vidim di
Napamet ti ovo pišem...
MethodInvoker mi = delegate
{
//ovdje napraviš sa gridom što treba
};
this.BeginInvoke(mi);
Crossthread riješen ali i dalje se krši... Jesam gore sve dobro posložio?
[edit] - krajnje isfrustriran bojicama i gridom, ubacio sam sleep na taktičko mjesto (sue me - ne freeza UI i radi ok ). Neka sačekaju tih 666 ms, ionako gube vrijeme na veće gluposti...
Crossthread riješen ali i dalje se krši... Jesam gore sve dobro posložio?
[edit] - krajnje isfrustriran bojicama i gridom, ubacio sam sleep na taktičko mjesto (sue me - ne freeza UI i radi ok ). Neka sačekaju tih 666 ms, ionako gube vrijeme na veće gluposti...
Šta se krši? Daj exception...
Evo, nakon malo prepravljanja, sve proradilo bez ikakvih treadova i sleepa
private void textBox2_TextChanged(object sender, EventArgs e)
{
// Parcijali search
// pretražuje bazu ovisno o txtboxu
SQLsearch(textBox2.Text);
partner_grid.DataSource = sql_dt;
partner_grid.Columns[1].Visible = false;
partner_grid.Columns[2].Visible = false;
partner_grid.Columns[3].Visible = false;
partner_grid.Refresh();
partner_grid.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
partner_grid.Columns[4].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
partner_grid.Columns[5].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
partner_grid.Columns[6].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
partner_grid.Columns[7].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
OznaciPartnere();
}
public void SQLsearch(string text)
{
//Pretražuje bazu partnera ovisno o txtbox stringu
sql_dt = new DataTable();
sql_ds = new DataSet();
SqlConnection sql_conn = new SqlConnection();
SqlCommand sql_cmd = new SqlCommand();
SqlDataAdapter sql_adapter = new SqlDataAdapter();
string select = String.Format("SELECT * from partneri_t WHERE ((prefiks LIKE '%{0}%') OR (ime LIKE '%{0}%') OR (srednje_ime LIKE '%{0}%') OR (prezime LIKE '%{0}%') OR (nastavak LIKE '%{0}%') OR (adresa LIKE '%{0}%'))", text);
try
{
postavke.ReadSetting();
sql_conn = new SqlConnection(postavke.connString);
sql_conn.Open();
sql_cmd = new SqlCommand(select, sql_conn);
sql_adapter = new SqlDataAdapter(sql_cmd);
sql_adapter.Fill(sql_ds);
sql_conn.Close();
sql_dt = sql_ds.Tables[0];
}
catch (Exception ex)
{
error_handler.ErrorText(ex.ToString(), "SQL SELECT error");
MessageBox.Show("SQL baza nedostupna!", "SQL Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public void OznaciPartnere()
{
// boja u žuto ako je is_checked = true
foreach (DataGridViewRow row in partner_grid.Rows)
{
if (row.Cells[19].Value != null)
{
string RowType = row.Cells[19].Value.ToString();
if (RowType == "True")
{
row.DefaultCellStyle.BackColor = Color.Yellow;
}
else { }
}
else
{
}
}
}
Ima malenu zadršku dok poboja (manje od pola sekunde) ali radi bez problema. Pa eto, ako nekome zatreba nešto slično - ovo gore vam je provjereno rješenje. Friday, tnx svejedno.
A što se tiče exceptiona koji je bacao, bio je neki NullReference na grid tj. na row. Nakon što sam praktički sve napisao od nule, proradilo je.
Evo, nakon malo prepravljanja, sve proradilo bez ikakvih treadova i sleepa
Čekaj, tebi ovo radi kad netko piše brzo? Npr 4-5 slova u sekundi...
Da, bez problema. Malo lagga (slova se ne pojavljuju odmah u txtboxu) ali radi... Laptop iz Moj PC, debug i release verzija.
Da, bez problema. Malo lagga (slova se ne pojavljuju odmah u txtboxu) ali radi... Laptop iz Moj PC, debug i release verzija.
To je onda neka malecka baza, ili? Preporučam ti da koristiš isti sqcommand objekt i prije svakog queryja pozoveš Cancel() metodu. Na taj način će ti stopirati eventualno izvršavanej prošlog queryja. Iako mi je i dalje nejasno zašto to isto nisi napravio nad DataTable-om jer bi bilo neuporedivo brže.
7500 redova u partneri_t (bio sam ih poduplao za probu, radilo je isto bez breakanja). Query traje manje od sekunde (gdje bi vidio točno vrijeme?) na ovih 7500.
Ako radim na datatable (e sada jel misliš na upit ili traženje 1 ili 0 za boju?), hoće li biti problem proslijediti gridu infromaciju da redak n poboji u žuto?
BTW, očekujem da će se baza smanjiti jer ima podosta duplih kontakata (skupljeno iz 3 baze, neki se mogu obrisati ali to kad prođe zaključak godine, dakle od subote će možda biti samo ~2k kontakata).
[edit]
set statistics time on;
go
select * from partneri_t where
nastavak like '%d.o.o%'
go
set statistics time off;
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 10 ms.
(251 row(s) affected)
SQL Server Execution Times:
CPU time = 110 ms, elapsed time = 464 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 1 ms.
7500 redova u partneri_t (bio sam ih poduplao za probu, radilo je isto bez breakanja). Query traje manje od sekunde (gdje bi vidio točno vrijeme?) na ovih 7500.
Ako radim na datatable (e sada jel misliš na upit ili traženje 1 ili 0 za boju?), hoće li biti problem proslijediti gridu infromaciju da redak n poboji u žuto?
BTW, očekujem da će se baza smanjiti jer ima podosta duplih kontakata (skupljeno iz 3 baze, neki se mogu obrisati ali to kad prođe zaključak godine, dakle od subote će možda biti samo ~2k kontakata).
Ajd napišem ti od kuće, sada mi je nezgodno... Tebi radi jer si samo ti spojen na bazu. Šta kad počne 5-10 ili 50 judi odjednom tipkati imena pa SQL poludi?
Ajd kad stigneš, napravi, puno ti hvala. Neće 50, neće ni 10, troje je zaposlenika ali prihvaćam svaki savjet kako to ubrzati.
A da je kompletno pretraživanje preselit na klijenta? Dakle, sa select * from pokupiti u DataTable i onda tamo vršiti pretragu (like i traženje is_checked). Problem je u tome što klijenti variraju od 900mhz i 256MB do quad core sa 4GB. Onda bi rasteretio bazu.
Kad bi sve bilo kod klijenta, onda bi mi multi thread sigurno trebao. Jedan koji dohvati sve iz SQLa i drugi koji traži sve po tablici i trpa u grid.
Kad bi sve bilo kod klijenta, onda bi mi multi thread sigurno trebao. Jedan koji dohvati sve iz SQLa i drugi koji traži sve po tablici i trpa u grid.
Ne treba ti poseban thread za dohvaćanje iz baze. Dohvatiš prvi puta i onda trčiš po DataTable-u. Onda ti čak ne treba ni thread za pretraživanje DataTable-a jer će ići vrlo brzo. Ali od kuće ti se javim sa nekim kvazi-rješenjem!
Jesu li programi pisani za Windows 8 kompatibilni s Windows 7?