Windows Forms и System.Threading.Timer [дубликат]

128
07 сентября 2019, 23:50

На данный вопрос уже ответили:

  • Работа с контролами из фонового потока 2 ответа

есть класс Work_class, в конструктор которого передаётся label, находящийся на форме я объявляю делегат на метод Check, затем объявляю Timer, но при запуске возникает исключение (при изменении текста в Label) "System.InvalidOperationException: "Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'Form1' не из того потока, в котором он был создан." Подскажите пожалуйста, что необходимо сделать

class Work_class
{
    public Work_class(Label time)
    {
        Timeleft = time;
    }
    protected Label Timeleft = null;
    protected DateTime Timerem;
    protected TimerCallback Callback = null;
    protected System.Threading.Timer Timer = null;
    public void Run()
    {
        Callback = new TimerCallback(Check);
        Timer = new System.Threading.Timer(Callback, this, 0, Interval);
        Timerem = DateTime.Now;
        Timerem = Timerem.AddHours(SecondsNeed);
    }
    protected void Check(object nothing)
    {
        Work_class T = nothing as Work_class;
        T.Timeleft.Text = (Timerem - DateTime.Now).ToString();
    }
}
Answer 1
protected void Check(object nothing)
    {
        Thread.Sleep(200);
        try
        {
            ((Label)nothing).Invoke((MethodInvoker)(() =>
            {
                ((Label)nothing).Text = (Timerem - DateTime.Now).TotalSeconds.ToString();
            }));
        }
        catch { }
    }
READ ALSO
Настройка связи с помощью Entity Framework

Настройка связи с помощью Entity Framework

Есть основная таблица с записями, в проекте описана как следующий класс

131
Конвертирование String в StringBuilder и обратно

Конвертирование String в StringBuilder и обратно

Есть некий метод, который получает в качестве параметра довольно большую стринговину (порядка 50000 символов и более)Метод разбивает полученную...

114
ListBox команда при выделении ListBoxItem

ListBox команда при выделении ListBoxItem

Кто-нибудь может подсказать, как можно при нажатии ListBoxItem выполнить команду открытия нового окна(MVVM) ListBox заполняется через ItemSource

104
Импорт персонажа с анимацией в Unity

Импорт персонажа с анимацией в Unity

Импортировал модельку с анимацией прыжка и бега с сайта Mixamo, там в готовой анимации не только анимация, но и изменение позиции, как это убрать,...

136