Я создаю приложение в LabVIEW, которое требует, чтобы я регистрировал события .NET через обратный вызов. API, который мне предоставлен, не содержит публичных событий, поэтому я не могу их правильно зарегистрировать. Кроме того, конструктор, который я пытаюсь создать, не работает. Я очень новичок в обработке событий и C# в целом, поэтому приношу свои извинения, если в моем описании отсутствует что-то.Обработка событий в LabVIEW через C# - Узел конструктора типа PROP.PropEngine не найден
Используя API, предоставленный компанией я работаю, я сделал этот обработчик событий:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using PROP.PropEngine;
namespace IMTEventHandler
{
public delegate void PropEngineEventHandlerDelegate(object sender, PROP.PropEngine.PropEngineEventArgs eventArgs);
public class IMTDelegate
{
public static event PROP.PropEngine.EventHandler PropEvent
{
add { inner.PropEvent += value; }
remove { inner.PropEvent -= value; }
}
public static void PropEngineEventHandlerFunc(object sender, PROP.PropEngine.PropEngineEventArgs eventArgs)
{
return ;
}
public PropEngineEventHandlerDelegate propEventHandler = PropEngineEventHandlerFunc;
//Pointer to our Event Handler
}
}
Их документация говорит, что конструктор принимает функцию указатель на обработчик события, например:
_propEngine = new PropEngine(propEventHandlerFunc)
у меня нет доступа к исходному коду, поэтому я думал, что я должен вместо этого создать свой собственный класс, с указателем на функцию является свойство/членом класса:
public PropEngineEventHandlerDelegate propEventHandler = PropEngineEventHandlerFunc;
Я думаю, что я мог бы просто написать это как частную функцию без нового класса, но, к сожалению, конечное приложение этого не позволит.
В приложении у меня возникли конфликты классов при попытке передать указатель этой функции конструктору, но я просто подумал, что мне нужно сделать бросок типа, чтобы заставить их работать (ошибка новобранец). Теперь я получаю эту ошибку узла конструктора, и я думаю, что это потому, что указатель, который я отправляю, является плохим указателем.
документация указывает на то, что обработчик события должен принимать два аргумента:
void PropEngineEventHandlerFunc(object sender, PROP.PropEngine.PropEngineEventArgs eventArgs)
sender
является объектом, и eventArgs
является «структура» своего рода, который содержит все данные о событии.
Проблемы: Моя функция указателя плохая, но я не знаю почему. Кроме того, типы событий не отображаются, поэтому я не могу их учитывать (я думаю).
Я заметил, что ваш PropEvent статичен. Почему это? –
Я не уверен! Разве это не должно быть? – ijustlovemath
Я тоже не уверен. Не могли бы вы добавить публичных членов вашего API к вашему вопросу? Это поможет определить, что делать. –