Event1.cpp
上传用户:sz0451
上传日期:2022-07-29
资源大小:256k
文件大小:2k
源码类别:

.net编程

开发平台:

Visual C++

  1. // This is the main project file for VC++ application project 
  2. // generated using an Application Wizard.
  3. #include "stdafx.h"
  4. #using <mscorlib.dll>
  5. using namespace System;
  6. // Delegates
  7. __delegate void FirstEventHandler(String*);
  8. __delegate void SecondEventHandler(String*);
  9. // Event source class
  10. __gc class EvtSrc
  11. {
  12. public:
  13. // Declare the events
  14. __event FirstEventHandler* OnFirstEvent;
  15. __event SecondEventHandler* OnSecondEvent;
  16. // Event raising functions
  17. void RaiseOne(String* pMsg)
  18. {
  19. OnFirstEvent(pMsg);
  20. }
  21. void RaiseTwo(String* pMsg)
  22. {
  23. OnSecondEvent(pMsg);
  24. }
  25. };
  26. // Event receiver class
  27. __gc class EvtRcv1
  28. {
  29.     EvtSrc* theSource;
  30. public:
  31.     EvtRcv1(EvtSrc* pSrc) 
  32.     {
  33.         if (pSrc == 0)
  34.             throw new ArgumentNullException("Must have event source");
  35.         // Save the source
  36.         theSource = pSrc;
  37.         // Add our handlers
  38.         theSource->OnFirstEvent += 
  39.             new FirstEventHandler(this, &EvtRcv1::FirstEvent);
  40.         theSource->OnSecondEvent += 
  41.             new SecondEventHandler(this, &EvtRcv1::SecondEvent);
  42.     }
  43.     // Handler functions
  44.     void FirstEvent(String* pMsg)
  45.     {
  46.         Console::WriteLine("EvtRcv1: event one, message was {0}",
  47.                         pMsg);
  48.     }
  49.     void SecondEvent(String* pMsg)
  50.     {
  51.         Console::WriteLine("EvtRcv1: event two, message was {0}",
  52.                         pMsg);
  53.     }
  54.     // Remove a handler
  55.     void RemoveHandler()
  56.     {
  57.         // Remove the handler for the first event
  58.         theSource->OnFirstEvent -= new FirstEventHandler(this, &EvtRcv1::FirstEvent);
  59.     }
  60. };
  61. // This is the entry point for this application
  62. #ifdef _UNICODE
  63. int wmain(void)
  64. #else
  65. int main(void)
  66. #endif
  67. {
  68.     Console::WriteLine(S"Event Example");
  69.     // Create a source
  70.     EvtSrc* pSrc = new EvtSrc();
  71.     // Create a receiver, and bind it to the source
  72.     EvtRcv1* pRcv = new EvtRcv1(pSrc);
  73.     // Fire events
  74.     Console::WriteLine("Fire both events:");
  75.     pSrc->RaiseOne(S"Hello, mum!");
  76.     pSrc->RaiseTwo(S"One big step");
  77.     // Remove the handler for event one
  78.     pRcv->RemoveHandler();
  79.     // Fire events again
  80.     Console::WriteLine("Fire both events again:");
  81.     pSrc->RaiseOne(S"Hello, mum!");
  82.     pSrc->RaiseTwo(S"One big step");
  83.     return 0;
  84. }