Czy argumenty zdarzeń są przekazywane przez odwołanie lub wartość w C #?

To raczej proste pytanie (tak myślę), ale nie wydaje mi się, żeby widziałem już odpowiedź. Wiem, że niektóre wartości są przekazywane przez wartość (np. Int i long), a inne są przekazywane przez odwołanie (np. Ciągi) po przekazaniu ich do funkcji.

W moim programie korzystam z programu do pracy w tle, dzięki czemu GUI nie blokuje się, gdy wykonujemy długi proces w tle. Muszę przekazać dane z powrotem do wątku interfejsu użytkownika z innego pliku, więc używam do tego zdarzeń. Teraz muszę wysłać listę tablic ciągów znaków z powrotem do wątku GUI, aby tam obsłużyć, i martwię się, jak będzie to obsługiwane. Zasadniczo w wątku roboczym mam pętlę, która zapełni listę, odeśle ją z powrotem do GUI za pośrednictwem procedury obsługi zdarzeń, a następnie wyczyści ją, aby mogła wypełnić ją przy następnym przejściu przez pętlę i zacząć od nowa.

Obawiam się, że gdy to zrobię, jeśli lista zostanie przekazana przez referencję, to w wątku interfejsu użytkownika, myślę, że zostanie wyczyszczona w połowie odczytu, ponieważ wątek roboczy nadal będzie czyścił go w tle. W tym przypadku zdecydowanie lepiej byłoby przekazać, a ja mogę znaleźć sposoby na wymuszenie tego (skopiuj do jakiejś tablicy właściciela lub dodaj mutex lub coś w tym rodzaju), ale pomyślałem, że dobrze byłoby wiedzieć, czy argumenty zdarzenia są przekazywane przez referencja lub wartość w ogóle, czy też jest taka sama jak metody i przekazuje je jako argumenty są zwykle przekazywane?

questionAnswers(4)

yourAnswerToTheQuestion