Threat i dzielenie się danymi

0

Mam problem z blokowaniem dostępu do zmiennych z wykorzystaniem backgroundWorkera :

 
pen.Color = Color.FromArgb(alpha, red, red, red);
var ImageOut = new Bitmap(src_image);
var g = Graphics.FromImage(SrcPicBox.Image);
g.DrawRectangle(pen, rectangle1);	
Thread.Sleep(10);

korzystam w nim z kilku zmiennych wykorzystywanych też przez klasę główną. Oczywiście debugger rzuca wyjątkami dotyczącymi współdzielenia zmiennych przez Threat. W jaki sposób powinno się blokować dostęp do zmiennych ? W klasie wykorzystać Lock() lub Monitor.Enter() czy tylko w backgroundWorkerze ?

No i jeśli w klasie zablokuje dostęp do zmiennej to czy dostęp do tej zmiennej w wywołaniu obiektu innej klasy tez będzie "zakazany" ?

A moim celem jest w tle rysowanie prostokącika na picBoxie w miejscu umieszczenia kursora.

4

Mały OT:

Lekcja angielskiego na dziś: Threat = Groźba, Thread = Wątek.

0

Jeśli użyjesz gdzieś lock(...){} to zapewnisz że ten blok będzie wykonywany tylko przej jeden wątek na raz, więc nie wystąpi problem ze współdzieleniem zasobów.
Jeśli w jakiejś klasie masz pole, które w jednej metodzie jest w bloku lock, a w innej nie, to w tej drugiej oczywiście nie będzie zablokowane i może dojść do równoczesnego użycia go przez kilka wątków.
Właściwe użycie Monitor'a jest równoznaczne użyciu lock. Tu masz dobrze wyłuskane różnice: http://stackoverflow.com/questions/2837070/lock-statement-vs-monitor-enter-method

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