C#委托从类

时间:2015-08-24 20:46:10

标签: c# winforms asynchronous

我有一个表单(myForm)实例化一个类(myClass)。在myClass中,我异步读取了一个plc。异步读取使用两个方法myClass.BeginRead和myClass.OnAsyncReadComplete。 myItem.BeginRead接受一个asyncCallback和一个名为myItem的对象。当OnAsyncReadComplete触发时,我需要在myForm中调用一个设置文本框控件文本的方法。我特别需要帮助连接一个委托来设置在myForm中找回的控件。我打算使用if invoke来设置textbox.text属性。 我已经包含了myClass中两个方法的示例。

public void ReadPLCAsyc()
{
    AsyncCallback asyncCallback = new AsyncCallback(this.OnAsyncReadComplete);
    Result[] result;
    Item[] itemArray = null;

    this.myItem = null;
    this.myItem = new ABLogix.Item(Config.ReadAppSettingsByKey("PLC_Tagname"));
    this.myItem.Elements = 7;

    this.myItem.HWTagName = Config.ReadAppSettingsByKey("PLC_Tagname");
    this.myGroup.Items.Add(this.myItem);

    this.myDevice.TimeoutTransaction = 2000;
    itemArray = new AutomatedSolutions.Win.Comm.AB.Logix.Item[this.myDevice.Groups[0].Items.Count];
    this.myDevice.Groups[0].Items.CopyTo(itemArray, 0);
    this.myDevice.BeginRead(itemArray, out result, new AsyncCallback(this.OnAsyncReadComplete), this.myDevice);
}

public void OnAsyncReadComplete(IAsyncResult ar)
{

    Device d = (Device)ar.AsyncState;
    Result[] results;
    try
    {
        d.EndRead(out results, ar);
        var v = d.Groups[0].Items[0].Values;

        **//Need to set myForm.textbox1.text = v.ToString();**

    }
    catch (Exception ex)
    {

    }
}

1 个答案:

答案 0 :(得分:2)

使用此模式:

/me/username