Cześć,
Na podstawiem artykułu o wątkach : http://codeguru.pl/article-656.aspx napisałem kawałek kodu:
class Program
{
public class Watki
{
public Thread thWatek1;
public Thread thWatek2;
public Watki()
{
thWatek1 = new Thread(watek1);
thWatek2 = new Thread(watek2);
}
public void watek1(object prefiks)
{
for (int i = 0; ; i++)
{
Console.WriteLine("watek1 " + prefiks.ToString() + i.ToString());
Thread.Sleep(500);
}
}
public void watek2()
{
for (int i = 0; ;i++ )
{
if (i > 25) i = 0;
Console.WriteLine("watek2 "+ (char)(i+'a'));
Thread.Sleep(500);
}
}
}
static void Main(string[] args)
{
Console.WriteLine("odpalamy watki w pulli");
// ?????????????????????
*ThreadPool.QueueUserWorkItem(a.watek2); *???????
ThreadPool.QueueUserWorkItem(a.watek1,"pula ");
ThreadPool.QueueUserWorkItem(delegate { a.watek2(); });
for (int i = 0; i < 10; i++)
{
Console.WriteLine("w miedzyczasie liczymy do 10 :" + i);
Thread.Sleep(300);
}
}
}
}
Podczas póby dodanie wątku do puli : ThreadPool.QueueUserWorkItem(a.watek2); kompilator zgłasza błąd: cannot convert from 'method group' to 'System.Threading.WaitCallback'. Wynika z tego że typ argumentu ThreadPool.QueueUserWorkItem() to System.Threading.WaitCallback który ma jeden argument i do niego jest rzutowany a.watek2. Sprawę rozwiązue więc dodanie do a.watek2 jakiegos arugmentu.
Dlaczego jednak nie ma błędu jeśli do dorzucenia metody a.watek2 do puli zastosujemy (jak powyżej) funkcje anonimową :
ThreadPool.QueueUserWorkItem(delegate { a.watek2(); });
?
Proszę o pomoc - to moje początki w c# :-)
pozdrawiam
takedo