Могу ли я прочитать состояние управления (не менять) в темах, не-UI, как этотМогу ли я прочитать состояние управления в резьб без UI
if (!string.IsNullOrWhiteSpace(notifyIcon.BalloonTipText))
{
// ...
}
Является ли это безопасно?
Могу ли я прочитать состояние управления (не менять) в темах, не-UI, как этотМогу ли я прочитать состояние управления в резьб без UI
if (!string.IsNullOrWhiteSpace(notifyIcon.BalloonTipText))
{
// ...
}
Является ли это безопасно?
См. this artice из журнала Visual Studio о многопоточности в WinForms.
Как объясняется на стр. 2, одна из проблем доступа к элементам управления пользовательского интерфейса из потока, отличного от потока, создавшего элемент управления, состоит в том, что в этом потоке нет насоса сообщений (или, по крайней мере, он не обязательно имеет один). «Чтение» состояния пользовательского интерфейса выполняется через оконные сообщения (например, WM_GETTEXT) так же, как и их запись, и это неправильно так же.
NotifyIcon не является элементом управления, поэтому он также не имеет метода Invoke. Свойство BalloonTipText имеет очень простой getter/setter без каких-либо событийных вызовов или собственного доступа к окну. Я бы сказал, просто использовать простые замки здесь. – taffer
@taffer - может быть, но это зависит от того, что вопрос ... это «Я могу прочитать состояние элементов управления в потоках, отличных от UI», или это может я иметь дело с NotifyIcon в не-UI нить? – Amit
В каждом элементе управления есть свойство «InvokedRequired». Проверьте это свойство, если оно ложно, вы можете вызвать метод обычным способом, иначе вызовите метод вызова с помощью делегата из элемента управления, к которому вы пытаетесь получить доступ.
Почему бы вам просто не попробовать? –
@Clive DM Потому что это может быть какое-то неопределенное поведение – FrozenHeart
Вы имеете в виду, прежде чем элементы управления инициализируются? –