Ich versuche, einen Ereignis-Aggregator in C++/CLI zu erstellen, weiß ich, dass die gültige Syntax in C# wäre wie folgt:einen Prism PubSub Artereignis in C++/CLI
//C# code
public partial class Foo : UserControl, IView, IDisposable
{
private IEventAggregator _aggregator;
public Foo(IEventAggregator aggregator)
{
InitializeComponent();
this._aggregator = aggregator;
if (this._aggregator == null)
throw new Exception("null pointer");
_subToken =_aggregator.GetEvent<fooEvent>().Subscribe(Handler, ThreadOption.UIThread, false);
}
private SubscriptionToken _subToken = null;
private void Handler(fooEventPayload args)
{
//this gets run on the event
}
}
direkt
jedoch Umwandlung dies zu C++/CLI gibt den Fehler "ein Zeiger zu Mitglied ist nicht gültig für eine verwaltete Klasse" in der angegebenen Zeile. Gibt es eine Problemumgehung? Ich denke, es hat etwas damit zu tun, wie C# "Action" generiert.
//C++/CLI code
ref class Foo
{
public:
Foo(IEventAggregator^ aggregator)
{
void InitializeComponent();
this->_aggregator = aggregator;
if (this->_aggregator == nullptr)
throw gcnew Exception("null pointer");
//error in the following line on Hander, a pointer-to-member is not valid for a managed class
_subToken = _aggregator->GetEvent<fooEvent^>()->Subscribe(Handler, ThreadOption::UIThread, false);
private:
IEventAggregator^_aggregator;
SubscriptionToken^_addActorPipelineToken = nullptr;
void Handler(fooEventPayload^ args)
{
//this gets run on the event
}
}