Добрый день. Делаю важный элемент в потоке. Запускаю поток из основного. И когда поток выполняется, студия ругается не на действие, а на условие(wtf????)

Asked
Active
Viewed 80 times
1
JamesJGoodwin
- 3,958
-
1студия ругается на действие - на чтение свойства Value. Используйте Invoke или async. – Jul 22 '15 at 14:41
2 Answers
0
Студия жалуется не на условие, а на обращение к элементу, созданного в другом потоке. Прочитайте про Делегаты. Можно убрать проверку на данную ошибку, но я вам не советую. Иногда такое получается...
ArchDemon
- 2,821
-
Проблема в том, что я умею исправлять такие ошибки способом "if(control.InvokeRequired)". Но как исправить эту ошибку именно в теле if? Я был бы ужасно рад, если бы мне показали код, где в теле if используется Invoke. – JamesJGoodwin Jul 22 '15 at 14:43
0
Напишите небольшой вспомогательный класс:
public static class WinFormsSafeCallHelper
{
public static T SafeGetValue<T>(this Control control, Func<T> func)
{
if (control.InvokeRequired)
{
return (T)control.Invoke(func);
}
return func();
}
}
Теперь ваше условие можно переписать так:
if (trackBar1.SafeGetValue(() => trackBar1.Value >= 20))
{
// do something
}
Антон Буторин
- 778