C#从另一个Task.Factory订阅事件

时间:2018-11-27 09:56:38

标签: c# events

可以帮助您。我无法订阅另一个任务中的对象触发的事件。 注意:如果我将代码带到任务之外,则可以正常工作。您可以看到注释的代码

private void Form1_Load(object sender, EventArgs e)
    {
        _machines.Add(new Machine() { Ip = "192.168.1.10", Name = "Machine_01", Status = "Connected" });
        dgvMachines.DataSource = _machines;
    }

    private void startLiveMonitoringToolStripMenuItem_Click(object sender, EventArgs e)
    {
        //if (_machines.Count <= 0) return;
        //_fpMachine = new ZktFingerPrint(_machines[0].Ip, _machines[0].Name);
        //_fpMachine.Connect();
        //_fpMachine.EnableLiveFingerPrintDetection();
        //_fpMachine.NewFingerPrintDetected += FpMachine_NewFingerPrintDetected;
        foreach (var machine in _machines)
        {
            Task.Factory.StartNew(() =>
            {
                IFingerPrintMachine fpMachine = new ZktFingerPrint(machine.Ip, machine.Name);
                fpMachine.Connect();
                fpMachine.EnableLiveFingerPrintDetection();
                fpMachine.NewFingerPrintDetected += FpMachine_NewFingerPrintDetected;
            });
        }
    }

    private  void FpMachine_NewFingerPrintDetected(object sender, FingerPrintEventArgs e)
    {
        var fpr = new FingerPrintRecord(e.FingerPrintDateTime, e.UserId);
        dgvMonitor.Rows.Add("Machine_01", fpr.FingerPrintDateTime, fpr.UserSn);
    }

0 个答案:

没有答案