[C#] watek uruchamiany w timerze. Jak to ogarnac zeby dziala

0

Mam kolejny problem. Siedze juz drugi dzien i dalej nie wiem jak to zrobic.
Chce zeby co 10 sekund uruchomił mi sie wątek w którym kasuje sobie pliki w danym folderze.

Chciałbym zeby to działało tak, ze co 10s timer wywołuje watek(wtedy odliczanie timera sie wyłącza), wątek sie wykonuje i kasuje wszystkie pliki w danym katalogu po czym watek ten sie wyłącza a załącza sie timer i odliczanie idzie od nowa.

Zrobiłem cos takiego

funkcja kasujaca pliki
public void Kasuj()
{
  // tutaj przeszukuje katalog w poszukiwaniu czy sa w nim pliki

if(ilePlikow>0)
  {
    File.Delete(plik)// jesli sa to je kasuje
  }
  MyThread.Join();
  MyThread.Abort();
  timer1.Enabled = true;
}

//Watek w ktorym kasuje 
public void Watek()
{
   MyThread = new Thread(Kasuj);
   MyThread.Start();
   
}

//Timer
private void timer1_Tick(object sender, EventArgs e)
{
 timer1.Enabled = false; //jesli wybuje 10s to zatrzymaj timera
 Watek();                     // i uruchom watek
}

No i niezbyt to mi ładnie chce działać oraz nie chce sie wyłączyć nawet jak pod sobie wrzuce pod jakiegos buttona MyThread.Abort().

Mógłby mi ktoś doradzić jak ładnie zrobić to co chce osiagnąc( bo wydaje mi sie ze moj kod jest beznadziejny) albo moze ktos ma linka do stronki gdzie przedstawione jest takie uzycie watkow

0

Hm, skoro używasz już timera przez cały czas działania programu to nie bardzo rozumiem po co chcesz uruchamiać ten wątek ktory ma skasować pliki?

stworz sobie jakas zmienna globalną x;
w metodzie tick
x++;
jesli x== ilestam
{
wywolujesz metode kasuj
zerujesz x
}

tak nie będzie prościej?

0

czyli timer tworzy tak jakby osobny watek?

0

nie wiem :P, oddzielnym watkiem to chyba nie jest, ale uzywa sie tego w przypadkach jak mamy jakas operacje ktora ma powtarzac sie co jakis czas.
gdy uzyjemy petli zwyklej (while), stracimy mozliwosc komunikacji z programem (no chyba ze zabawimy sie w translatemessage).

albo jeszcze lepiej, bez tego x, po prostu uswat timer aby powtarzał się co 10 sekund(włąściwość interval = 10000 milisekund) i wrzuć tam metode kasuj. powinno działać tak, chyba :D

0

tylko, czy jak bede miał np 10 000 plikow do skasowania to zeby mi aplikacja nie zamarła, dlatego chciałem to w watek wrzucic

0

tak, Timer uruchamia osobny wątek...

0
sdfaasdf napisał(a)

tak, Timer uruchamia osobny wątek...

hm, to czemu z metody timer_tick mozna modyfikowac wartosci, stworzone np na poczatku dzialania programu, bez invoke, begininvoke?
ale moze masz rację, tak pytam z ciekawości.

PS odnośnie programu goodfather

  MyThread.Join();
  MyThread.Abort();
  timer1.Enabled = true;

timer1.enabled sie nie wykona

0

bo Timer jest tak stworzony, że można, tak samo BackgroundWorker, działa na innym wątku a może wszystko.

1 użytkowników online, w tym zalogowanych: 0, gości: 1