使用继承处理跨项目的事件

本文关键字:项目 事件 处理 继承 | 更新日期: 2023-09-27 18:32:16

我有 2 个项目;- 我的应用程序是用C++编写的,其中一些项目文件设置为使用/clr- 我的C#WPF控件库,其中包含一些窗体

在C++应用程序中,我从 C# dll 加载表单并在 STAThread 中显示它们,同时在后台运行其他一些本机内容。

我想在我的 C++ 应用程序中处理来自 C# 表单的表单事件。这是我启动表单的代码;

using namespace System::Windows;
using namespace System::Windows::Controls;
using namespace MyProject::Interface::Views;
public ref class MyProjectApplication : public Application
{
};
[STAThread]
void ManagedMain()
{
    CLILicenseView^ winLicenseAgreement = gcnew CLILicenseView();
    MyProjectApplication^ MyProjectCLI = gcnew MyProjectApplication();
    MyProjectCLI->Run(winLicenseAgreement);
}

我的原始形式称为"License.xaml",我试图继承它并覆盖事件,因为我认为它可能有助于我处理事件,但我不知道我在做什么。

using namespace System;
using namespace System::Windows;
using namespace System::Windows::Controls;
using namespace MyProject::Interface::Views;
namespace MyProject
{
    public class CLILicenseView : License
    {
        public void CLILicenseView()
        {
            //
        }
    }
}

这是最好的方法吗,如果不是,我如何处理C++应用程序中的表单事件(即:按钮单击)?

使用继承处理跨项目的事件

我认为组合是正确的工具,而不是继承。在我处理过的 C++/CLI 项目中(只是一个类库,没有 UI),ref 类通常包含一个指向C++业务逻辑的未托管指针。当用户想要与业务逻辑交互时,他们调用托管方法,然后通过指针调用未托管的代码。在您的情况下,当表单想要与非托管代码交互时,它应该回调 MyProjectApplication 进而调用非托管代码。