Поскольку ready
не помечен как volatile
, и значение может быть кэшировано в начале цикла while
, потому что оно не изменяется в цикле while
. Это один из способов оптимизации кода дрожания.
Итак, возможно, что поток начинается до ready = true
и читает ready = false
, кэширует этот поток локально и никогда не читает его снова.
Проверьте ключевое слово volatile .
Местом происхождения является местоположение (то есть физическая папка) исполняемой сборки приложения (то есть .exe, который запускает пользователь). Таким образом, URI относится к этой папке.
Пример: у вас есть
URI пакетов - это pack://siteoforigin:,,,/MyIcon.bmp
и pack://siteoforigin:,,,/Icons/MyOtherIcon.bmp
при запуске MyApp.exe. Это означает, что вы должны скопировать эти файлы в эти места.
Напротив, URI пакета приложения относится к ресурсам, встроенным в вашу сборку (с помощью действия сборки «Ресурс»).