如何创建委托以在将由线程运行的对象方法中工作?

时间:2019-07-11 04:59:55

标签: c# delegates

我有一个方法可以从标签中的string []打印信息,该标签是类User的一部分,我实例化了两次。我必须在两个线程中运行此线程,每个线程都为一个User运行,因此信息将以先前创建的两个标签打印(这就是为什么我将Label作为方法中的参数传递的原因)。

我知道要做到这一点(否则会引发Exception),我必须调用一个委托,但是我没有看到使用控件作为参数的委托的示例。我正在使用类似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,并且当尝试编写该委托时,它是完全错误的。

0 个答案:

没有答案