Передаются ли аргументы события по ссылке или значению в C #?

Довольно простой вопрос (Я думаю ), но я, кажется, уже не вижу ответа. Я знаю, что некоторые значения передаются через значение (, например int и long ), а другие передаются по ссылке (, например строки ), когда вы передаете их функциям.

В моей программе используется фоновый рабочий, чтобы графический интерфейс не блокировался, когда мы выполняем длительный процесс в фоновом режиме. Мне нужно передать данные обратно в поток пользовательского интерфейса из другого файла, поэтому я использую для этого события. Теперь мне нужно отправить список массивов строк обратно в поток GUI для обработки там, и я беспокоюсь о том, как он будет обрабатываться. По сути, в рабочем потоке у меня есть цикл, который заполняет список, отправляет его обратно в графический интерфейс через обработчик событий, а затем очищает его, чтобы он мог заполнить его при следующем проходе через цикл и начать заново.

Меня беспокоит, что когда я это делаю, если список передается по ссылке, то в потоке пользовательского интерфейса я думаю, что он будет очищен в середине -чтения, поскольку рабочий поток все еще будет очищать его в фоновом режиме. В этом случае гораздо предпочтительнее пройти мимо, и я могу найти способы заставить его (скопировать в какой-нибудь массив держателей или добавить мьютекс или что-то в этом роде ), но я подумал, что было бы хорошо знать, если событие аргументы передаются через ссылку или значение в целом, или это то же самое, что и методы, и он будет передавать их, как обычно передаются аргументы?

14
задан abatishchev 3 August 2012 в 17:37
поделиться