Wywołanie metody w wątku

0

Zakładając, że w mainie mamy następujący kod:

PrintNumber p = new Printer();

Thread backroundThread(new ThreadStart(p.PrintNumber));
 backroundThread.Start();

To czy jeśli zamiast:

Thread backroundThread(new ThreadStart(p.PrintNumber));

użyje takiego zapisu:

Thread backroundThread(p.PrintNumber);

to będzie to jakiś błąd ?

0

a czy nie lepiej sprawdzic w dokumentacji?

https://msdn.microsoft.com/pl-pl/library/system.threading.thread(v=vs.110).aspx

Inicjuje nowe wystąpienie Thread klasy, określając delegata, który umożliwia obiektu mają być przekazane do wątku, gdy wątek jest uruchomiony.```

jezeli printnumber jest funkcja (delegatem) to mozna tak zrobic

https://msdn.microsoft.com/pl-pl/library/1h2f2459(v=vs.110).aspx
0

to będzie to jakiś błąd ?

Tak, to się nie skompiluje. Zresztą jak wszystko w tym kodzie.

fasadin napisał(a):

a czy nie lepiej sprawdzic w dokumentacji?

https://msdn.microsoft.com/pl-pl/library/system.threading.thread(v=vs.110).aspx

Inicjuje nowe wystąpienie Thread klasy, określając delegata, który umożliwia obiektu mają być przekazane do wątku, gdy wątek jest uruchomiony.```

No, ten tekst udowadnia, że lepiej nie sprawdzać w takiej dokumentacji. :P

0

A co jeśli chcę dać metodę, która np zwraca inta i ma dwa parametry ? To zarówno ThreadStart ani ParameterizedThreadStart się nie na da, ponieważ oba delegaty przyjmują tylko w konstruktorze metody, które coś zwracają. Na stacku znalazłem, że wtedy piszę się delegata w sposób anonimowy, tak się robi wtedy ?

2

A co Ty w ogóle chcesz osiągnąć? Bo na 95% żaden Thread nie jest Ci potrzebny, wystarczy Task.

0

Na razie nie uczyłem się o Task tylko o Thread i chcę to zrozumieć.

1

Ok, rozumiem. To zapakuj sobie swoje dwa parametry w jakąś klasę i użyj ParameterizedThreadStart przekazując obiekt tej klasy.

0

A co jeśli chcę coś zwrócić ? Wedy ```csharp
ParameterizedThreadStart

0

Wartość tego co wyliczysz w funkcji przypisujesz do właściwości obiektu i w ten sposób twoja funkcja, która nic nie zwraca będzie mogła jednak "zwrócić" wynik.

0

Wątek uruchamia się po to, żeby przeprowadzać jakieś długotrwałe operacje w tle, a nie żeby coś z niego zwracać. Musisz zrobić tak, jak napisał @Papec, tylko pamiętaj o synchronizacji tego pola, które utworzysz, żeby uniknąć jakichś zakleszczeń i innych takich wątkowych problemów.
I zainteresuj się też metodą Thread.Join, ona też Ci chyba tu może pomóc.

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