KEDRIGERN: Staticke promenne ne! To je 3x fuj a jeste navic spatne!
LOOCAS: Stejne jako kazdy jiny multithreading ve winforms (predpokladam, ze pouzivas winforms - nebo wpf?)
Kdyz to budes mit ve formu (je to stejny v usercontrolu, panelu, atd...), tak napriklad takto:
public class MyForm : Form {
// ... bla bla bla ...
void BackgroundWorker_DoWork() {
var listener = .....
using(var tcpClient = listener.AcceptTcpClient()) {
// ... ziskani dat
// mujDelegatProUI = anonymni funkce, ktera se ma spustit v UI vlakne
Action mujDelegatProUI = ()=> {
// tento kod uz pobezi v UI vlakne
this.NejakaFunkce(15, true, "Hello world!");
};
// Invoke() zaridi spusteni delegata v UI vlakne - ceka na jeho dokonceni
this.Invoke(mujDelegatProUI);
// BeginInvoke() zaridi spusteni delegata v UI vlakne - NECEKA na jeho spusteni ani dokonceni, toto vlakno pokracuje dal
// this.BeginInvoke(mujDelegatProUI);
}
}
void NejakaFunkce(int a, bool b, string c) {
// .... neco to dela
}
}
Je dobre si uvedomit zda chces pouzivat Invoke() ci BeginInvoke().
Dobrej clanek o multithreadingu v ramci winforms je na codeprojectu:
http://www.codeproject.com/Articles/10311/What-s-up-with-BeginInvoke
Pripadne se mi ozvi do posty s kodem, kouknu se ti na to.