Каков наилучший способ сделать это: основной поток (поток A) создает два других потока (поток B и поток C). Потоки B и C выполняют тяжелый дисковый ввод-вывод и, в конечном итоге, должны передать ресурсы, созданные ими, в поток A, чтобы затем вызвать метод во внешнем файле DLL, который требует, чтобы поток, создавший его, был вызван правильно, поэтому только поток A может вызвать его .
Единственный раз, когда я использовал потоки, был в приложении Windows Forms, и методы вызова были именно тем, что мне было нужно. Эта программа не использует Windows Forms, и поэтому в ней нет методов Control.Invoke для использования.
В своем тестировании я заметил, что если переменная создается в потоке A, у меня нет проблем с доступом и изменением ее из потока B / C, что мне кажется очень неправильным. С Winforms я был уверен, что он выдает ошибки при попытке доступа к вещам, созданным в других потоках. Я знаю, что менять вещи из нескольких потоков небезопасно, но я очень надеялся, что .NET вообще запретит это для обеспечения безопасного кодирования. Делает ли это .NET, и я просто скучаю по лодке, или она делает это только с приложениями WinForm?
Так как это, по-видимому, позволяет это сделать, я делаю что-то, как сделала бы ОС, создала флаг и отслеживала его из потока А, чтобы увидеть, если он изменится. Если это так, тогда вызовите метод. Разве обработчик событий, по сути, не делает этого, поэтому может ли событие использоваться как-то вызванным в главном потоке?