Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

C# -> Problem sa Thread-ovima

[es] :: .NET :: .NET Desktop razvoj :: C# -> Problem sa Thread-ovima

[ Pregleda: 2469 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

_Doctor_
Beograd

Član broj: 68915
Poruke: 12
*.dial.b92.net.



Profil

icon C# -> Problem sa Thread-ovima25.09.2005. u 00:31 - pre 226 meseci
Prvo pozdrav svima i nadam se da cce neko mocci da mi pomogne u vezi thread-ova. Naime o chemu se radi, pa ovako: Pocheo sam da modifikujem tetris tj. da zamenim timer sa thread-om (Koliko je to teshko nisam ni sanjao). Shta se deshava? Dobijam sledecci exception:

"Controls created on one thread cannot be parented to a control on a different thread"

u trenutku kada je figura pala do kraja tj. u tom trenutku se poziva funkcija koja prikazuje u NEXT panel-u sledeccu figuru.

Deo koda:

private void Tick (){
while(!gameEnd){
if(generator.canMoveDown(currPiece)){
currPiece.moveDown();
} else {
collector.addElemRange (currPiece.getElems());
currPiece = nextPiece;

if(collector.removeRows()) { // Ako je doslo do brisanja reda.

deletedRows += collector.DELETED_ROWS;
points += collector.DELETED_ROWS * collector.DELETED_ROWS * 100;

int val = prbLevel.Value;
val += collector.DELETED_ROWS;
if(val >= prbLevel.Maximum)
val = val - prbLevel.Maximum;

prbLevel.Value = val;


if(deletedRows >= gameLevelLimit && gameLevel < 12){ // Setting game level
levelUp();
lblLevelNum.Text = gameLevel.ToString();
//timGame.Interval = gameSpeed;
}

lblPointsNum.Text = points.ToString();
lblRowsNum.Text = deletedRows.ToString();

}

if(generator.canAddPiece()) {
gameField.Controls.AddRange(currPiece.getElems());
showNext(); // OVDE PUCA PROGRAM
} else {
if(gameOver.ShowDialog() == DialogResult.OK){
newGame();
} else {
gameEnd = true;
}
}
}
Thread.Sleep(gameSpeed);
}
}

Treba mi samo ideja tj. u kom pravcu da razmishljam u radu sa thread-ovima. Svestan sam da su thread-ovi jedan od problematichnijih delova programiranja ali shta da radim kad nisam imao gde drugde da se obratim. Unapred hvala svima na pomocci i nadam se da nisam previshe trazzio.

[Ovu poruku je menjao _Doctor_ dana 25.09.2005. u 01:33 GMT+1]
Svet je pun budala koje misle da je svet pun budala !
 
Odgovor na temu

milanche
San Francisco

Član broj: 2447
Poruke: 1200
*.hsd1.ca.comcast.net.



+1001 Profil

icon Re: C# -> Problem sa Thread-ovima25.09.2005. u 06:58 - pre 226 meseci
Sudeci po tekstu greske koji si dobio, verovatno se radi o ogranicenju koje postoji jos
u ranijim verzijama multithread sistema na Windows-u.

Sustina problema je da je jedino glavnom thread-u aplikacije dozvoljeno da pristupa
kontrolama (tj. da zove metode direktno). Svi ostali worker thread-ovi ne mogu da
pristupaju direktno.

Razlog za ogranicenje je sto je glavni thread brizljivo integrisan u Windows okruzenje,
sinhronizovan sa mnostvom procesa vezanih za odrzavanje vizuelne iluzije prozora.
Dozvoliti ostalim thread-ovima da uskacu je moguce, ali bi zbog uvodjenja dodatnih
sinhronizacionih mehanizama grdno usporilo celu pricu.

Nacin da worker thread izvrsi update-ovanje kontrole mora da bude indirektan. Obicno
je to asinhrono post-ovanje (PostMessage( )) custom-definisanih poruka za koje glavni
thread reaguje za to definisanim handler-ima.

Za konkretnu realizaciju, pogledaj .NET dokumentaciju, i/ili sacekaj dopise ljudi koji se
vise bave .NET-om nego ja.
 
Odgovor na temu

dusty
Predrag Glumac
Zemun, Srbija

Član broj: 15383
Poruke: 549
*.fiberop.matgnet.com.

Sajt: www.mika.rs


+6 Profil

icon Re: C# -> Problem sa Thread-ovima26.09.2005. u 10:37 - pre 226 meseci
Pogledaj MethodInvoke, bilo je ranije price o istom na ovom forumu.
America national sport is called baseballs. It very similar to our sport, shurik, where we take dogs, shoot them in a field and then have a party.
 
Odgovor na temu

[es] :: .NET :: .NET Desktop razvoj :: C# -> Problem sa Thread-ovima

[ Pregleda: 2469 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.