1

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

  • 1
    студия ругается на действие - на чтение свойства Value. Используйте Invoke или async. –  Jul 22 '15 at 14:41

2 Answers2

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
}