Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
托管C+中的等效代码+&;C#(VB6中的事件)_C#_C++_Events_Managed - Fatal编程技术网

托管C+中的等效代码+&;C#(VB6中的事件)

托管C+中的等效代码+&;C#(VB6中的事件),c#,c++,events,managed,C#,C++,Events,Managed,在VB6中,ActiveX组件中创建的事件如下所述: 公共事件处理完成() 并调用该ActiveX组件,如: RaiseEvent处理完成 我创建了一个管理C++的DLL,我想做同样的事情。看起来代表们并不完全是我想要的。我认为更合适的项目是事件声明。救命 最后,我有一个C#应用程序,我希望它具有如下功能: MyObject::ProcessingComplete()事件和委托 摘要:委托是一个 可以保存对方法的引用。 与其他类不同,委托类 有签名,可以保存 仅引用匹配的方法 它的签名 概

在VB6中,ActiveX组件中创建的事件如下所述:

公共事件处理完成()

并调用该ActiveX组件,如:

RaiseEvent处理完成

我创建了一个管理C++的DLL,我想做同样的事情。看起来代表们并不完全是我想要的。我认为更合适的项目是事件声明。救命

最后,我有一个C#应用程序,我希望它具有如下功能:

MyObject::ProcessingComplete()事件和委托

摘要:委托是一个 可以保存对方法的引用。 与其他类不同,委托类 有签名,可以保存 仅引用匹配的方法 它的签名

概要:.NET编程包括 代表和活动的概念 协助观察者或 发布/订阅设计模式。最 很多时候,事件的使用方式基本相同 回调函数使用的方式 已在标准Win32中使用多年 API或MFC编程

活动和代表

摘要:委托是一个 可以保存对方法的引用。 与其他类不同,委托类 有签名,可以保存 仅引用匹配的方法 它的签名

概要:.NET编程包括 代表和活动的概念 协助观察者或 发布/订阅设计模式。最 很多时候,事件的使用方式基本相同 回调函数使用的方式 已在标准Win32中使用多年 API或MFC编程


我想代表们是最好的选择

public delegate void ProcessCompleteEventHandler(object sender, EventArgs e);
在你的课堂之外的某个地方定义上述内容。在你们班里

class MySampleClass{
    public event ProcessCompleteEventHandler ProcessComplete;

    void SomeWork()
    {
        //Do some work, and when its over...
        ProcessComplete.Invoke(this, null);
    }

}
在主程序中:

MySampleClass obj = new MySampleClass();
obj.ProcessComplete += new ProcessCompleteEventHandler(my_handler);

我的处理程序应该有相同的签名…

我想代理是最好的选择

public delegate void ProcessCompleteEventHandler(object sender, EventArgs e);
在你的课堂之外的某个地方定义上述内容。在你们班里

class MySampleClass{
    public event ProcessCompleteEventHandler ProcessComplete;

    void SomeWork()
    {
        //Do some work, and when its over...
        ProcessComplete.Invoke(this, null);
    }

}
在主程序中:

MySampleClass obj = new MySampleClass();
obj.ProcessComplete += new ProcessCompleteEventHandler(my_handler);

我的\u处理程序应该具有相同的签名…

听起来您确实想要一个事件。在.NET中,事件只是一个按照惯例具有特殊签名的委托。下面是一个在类中声明事件的C#示例:

public class MyObject
{
    // ...

    public event EventHandler ProcessingComplete;

    // ...
}
EventHandler是一个具有两个参数的委托:

public delegate EventHandler(object sender, EventArgs e);
发送方是引发事件的对象,EventArgs对要传递给事件订阅者的任何信息进行编码

每一项活动都应遵循这一惯例。如果希望传递事件的专用信息,可以创建自己的从EventArgs派生的类。NET为此定义了一个通用类型的EventHandler委托,
EventHandler
。C#示例:

在类内部,要触发事件,可以使用常规语法调用委托:

void Process()
{
    // ...

    // processing is done, get ready to fire the event
    EventHandler processingComplete = this.ProcessingComplete;

    // an event with no subscribers is null, so always check!
    if (processingComplete != null)
    {
        processingComplete(this, EventArgs.Empty);
    }
}

听起来你确实想要一个活动。在.NET中,事件只是一个按照惯例具有特殊签名的委托。下面是一个在类中声明事件的C#示例:

public class MyObject
{
    // ...

    public event EventHandler ProcessingComplete;

    // ...
}
EventHandler是一个具有两个参数的委托:

public delegate EventHandler(object sender, EventArgs e);
发送方是引发事件的对象,EventArgs对要传递给事件订阅者的任何信息进行编码

每一项活动都应遵循这一惯例。如果希望传递事件的专用信息,可以创建自己的从EventArgs派生的类。NET为此定义了一个通用类型的EventHandler委托,
EventHandler
。C#示例:

在类内部,要触发事件,可以使用常规语法调用委托:

void Process()
{
    // ...

    // processing is done, get ready to fire the event
    EventHandler processingComplete = this.ProcessingComplete;

    // an event with no subscribers is null, so always check!
    if (processingComplete != null)
    {
        processingComplete(this, EventArgs.Empty);
    }
}