Permalänk
Medlem

C# multithread hjälp!

har en thread som ligger och söker av en textfil, om den hittar det den söker i sin textfil så komer den köra den här koden. har markerat det som chrashar

public void StartPlaying() { //Skapa ett handtag IntPtr SpotHandle = FindWindow("SpotifyMainWindow", null); SetForegroundWindow(SpotHandle); //Skicka kommando System.Threading.Thread.Sleep(1000); // 1 sekund efter spotify har startats int time = 50; for (int i = 0; i < 4; i++) { SendKeys.Send("{TAB}"); // 4 tabs System.Threading.Thread.Sleep(time); } for (int ii = 0; ii < 5; ii++) { SendKeys.Send("{DOWN}"); // 5 down System.Threading.Thread.Sleep(time); } SendKeys.Send(" "); //space System.Threading.Thread.Sleep(time); }

nu fungerar det inte efter som att den threaden inte kan hantera messages. och den andra threaden är ett windows form om behöver sina threads, har någon ett förslag på hur jag ska göra?

Visa signatur

Byter hårdvara alltför ofta.... Mest troligt sitter jag på en dator med någon linuxdist på.

Permalänk
Medlem

kan du inte lägga den i formklassen, sedan köra ett invokeanrop från ditt ställe med delegater?

Permalänk
Medlem

jag är ganska ny inom programmering, skulle du kunna förklara lite enklare?

Ingen som har ett kodexempel på hur jag skulle kunna få det att fungera?

Visa signatur

Byter hårdvara alltför ofta.... Mest troligt sitter jag på en dator med någon linuxdist på.

Permalänk
Hedersmedlem
Skrivet av Krillezz:

Ingen som har ett kodexempel på hur jag skulle kunna få det att fungera?

Såhär kanske?

this.Invoke(new MethodInvoker(delegate() { SendKeys.Send("{TAB}"); }));

Permalänk
Skrivet av Krillezz:

jag är ganska ny inom programmering, skulle du kunna förklara lite enklare?

Ingen som har ett kodexempel på hur jag skulle kunna få det att fungera?

Jag tror DaltonSleeper menar såhär:

- Tidigt i GUI tråden, typiskt innan du skapar din andra tråd, så plockar du ut ett Dispatcher-objekt för GUI-tråden:

System.Windows.Threading.Dispatcher _guiThreadDispatcher;

_guiThreadDispatcher = System.Windows.Threading.Dispatcher.CurrentDispatcher;

- Sedan när du i din andra tråd kommer fram till att du vill köra StartPlaying() så kör du dispatcherns Invoke metod, så kommer StartPlaying() metoden att köras på GUI-tråden;

_guiThreadDispatcher.Invoke(new Action(StartPlaying));

Permalänk
Medlem

Yes, annars googla på "csharp thread invoke" så får du många exempel. Det invoke gör är att den pekar på en metod som ligger hos huvudtråden, skickar data dit och låter huvudtråden sedan ta över för att utföra operationer som den andra tråden normalt inte får göra.

Permalänk
Medlem

Jag föreslår att du tittar på hur du skapar dina egna Events. (events/delegates)

Dvs skapa ett "KeyFound" event som du registrerar dig på. Eventet triggar du från din tråd.

Visa signatur

Sony Vaio FE21M