Kezdőoldal » Számítástechnika » Programozás » Mi a hiba a kódban? (c#)

Mi a hiba a kódban? (c#)

Figyelt kérdés

Gőzöm nincs a szálkezeléshezez is csak egy gyenge próbálkozás, de nem jó.

Ez a kód:


public partial class Form1 : Form

{

private Keys m_keys;

public Thread t1;

public Thread t2;

public Form1()

{

InitializeComponent();

timer1.Interval = 1;

timer1.Enabled = true;

timer1.Start();


}

private void Form1_KeyDown(object sender, KeyEventArgs e)

{

m_keys = e.KeyCode;

}


private void Form1_KeyUp(object sender, KeyEventArgs e)

{

m_keys = Keys.U;

}

public void ThreadFunction2()

{

try

{

MethodInvoker mi2 = new MethodInvoker(mozgas);

BeginInvoke(mi2);

}

catch

{

}


}

public void ThreadFunction()

{

try

{

MethodInvoker mi = new MethodInvoker(ugras);

BeginInvoke(mi);

}

catch

{

}


}

public void ugras()

{

if (m_keys == Keys.Up)

{

m_keys = Keys.U;

for (int i = 0; i < 50; i++)

{

pictureBox1.Location = new Point(pictureBox1.Location.X, pictureBox1.Location.Y - 5);

if (m_keys == Keys.Right)

{

pictureBox1.Location = new Point(pictureBox1.Location.X + 10, pictureBox1.Location.Y);

}

Thread.Sleep(2);


}

for (int i = 0; i < 50; i++)

{

pictureBox1.Location = new Point(pictureBox1.Location.X, pictureBox1.Location.Y + 5);

if (m_keys == Keys.Right)

{

pictureBox1.Location = new Point(pictureBox1.Location.X + 10, pictureBox1.Location.Y);

}

Thread.Sleep(2);


}

}

}


public void mozgas()

{

if (m_keys == Keys.Left)

{

pictureBox1.Location = new Point(pictureBox1.Location.X - 10, pictureBox1.Location.Y);

}

if (m_keys == Keys.Right)

{

pictureBox1.Location = new Point(pictureBox1.Location.X + 10, pictureBox1.Location.Y);

}

}

private void timer1_Tick(object sender, EventArgs e)

{

t2 = new Thread(new ThreadStart(ThreadFunction));

t2.IsBackground = true;

t2.Start();

t1 = new Thread(new ThreadStart(ThreadFunction2));

t1.IsBackground = true;

t1.Start();


}


Csak egy picturebox mozgatása jobbra balra egyik szálon ill. msásik szálon az "ugrás". De ugrás közbe mégse tudd jobbra vagy balra menni. Mit rontottam el a kódban?



2011. nov. 18. 16:08
 1/4 anonim ***** válasza:
Jól értem, hogy két szálon akarsz _egyszerre_ mozgatni egyetlen pictureboxot? Mert itt a pictureboxhoz egyszerre mindig csak az egyik szál fér hozzá, tehát vagy "mozog" vagy "ugrik".
2011. nov. 18. 16:14
Hasznos számodra ez a válasz?
 2/4 A kérdező kommentje:
Igen mivel belemet kiszenvedtem és egy szálno nem tudom megcsinálni h ugrás közben mozoghasson jobbra-balra, ezért így kétszálon próbálnám megoldani, de életembe nem ahsználtama töbszálú programzást ezért kértem segítséget. Hogy kéne átírni a progit, hogy egyik szálon ugorjon a felfele nyílra a másikon pedig jobbra, vagy blara mozogjon.
2011. nov. 18. 17:01
 3/4 anonim ***** válasza:

Először is fogalmazd meg pontosan, mit is akarsz elérni.

Most ugye az történik, hogy a timer minden egyes tick-jére elinditasz két új szálat. Ez úgy hülyeség, ahogy van.

Ha jól értelmezem, azt akarod elérni, hogy a nyilakkal mozgasd a picturebox-ot. Ehhez minek kellenek egyáltalán szálak?

2011. nov. 18. 23:28
Hasznos számodra ez a válasz?
 4/4 A kérdező kommentje:
Elgé sokan mondták már nekem hnem kell szál ahhoz h mozgassam azt a nyavajás pb-t. De egyik okostojás sem jutott el addig hogy elmodnja akkor hogy a frászba kell emgoldani. A felfelenyillal ugrik a pb, jobbra balra nyilall értelemszerűen jobbra balra megy. DE! Ha megyek pl jobra és ugrok akkor őő megáll és egyhelybe ugrik. Ezt akarom kiküszöbölni, és mint mondtam senki nem magyarázta el, hogy kéen ezért a legjobb ötletem a két szálon ftó progi volt, viszont életembe nem használtam szálakat, szóval NE csodálkozz hogy marhaságok lehetnek benne.
2011. nov. 18. 23:47

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!