Как создать делегат для работы в методе объекта, который будет выполняться потоком? - PullRequest
0 голосов
/ 11 июля 2019

У меня есть метод, который печатает информацию из строки [] в метке, которая является частью класса User, который я создаю дважды.Я должен выполнить это в двух потоках, каждый для пользователя, поэтому информация печатается в двух ранее созданных метках (поэтому я передаю метку в качестве параметра в методе).

Я понимаю, что для этого (в противном случае выдается исключение) я должен вызвать делегата, но я не видел примеров делегатов с элементами управления в качестве параметров.Я работал с чем-то вроде примера, который предоставляет Microsoft, поэтому я попробовал что-то вроде приведенного ниже кода.

В любом случае это не работает, и я чувствую, что понятия не имею, что я делаю ...Какой тип делегата мне следует использовать здесь?

Спасибо.

Я пытался создать делегата, но безуспешно.Я попытался найти примеры целевых объектов, которые действуют на методы, которые будут вызываться в другом классе, и с компонентами в качестве параметров, но не смогли найти понятные.

Это биты кода;первый - тот, который печатает на этикетке;второй - делегат, в который я пытался поместить первый бит кода:

public void Info(Label lbl){
    string[] arrPrint = PrintableArray()
    foreach(var line in arrPrint)
    {
        lbl.Text += line;
    }
}


private delegate void Call(Label lbl);

private void WriteText(Label lbl)
{
    if (lbl.InvokeRequired)
    {
        var d = new SafeCall(WriteText);
        Invoke(d, new Label { lbl });
    }
    else
    {
        foreach(var line in arrPrint)
        {
            lbl.Text += line;
        }
    }
}

Я ожидаю, что два потока будут работать, но получит исключение InvalidOperationException без делегата, и при попытке записать этот делегат,это совершенно неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...