送你一段代码
出处:http://www.csdn.net/expert/topic/460/460324.xml?temp=.4055292
   异步通知演示 异步通知演示 异步通知演示 异步通知演示 异步通知演示 异步通知演示我曾经遇到一个问题:
一个日程安排软件,有主程序与提醒程序两个EXE,当在主程序中设定了新的日程,则提醒程序不可能知道。如何让提醒程序重新读数据呢?
开始我想用DDE,可后来DDE超时,所以,后来想用内存共享,但最后改用了:《异步通知》
在这里,也曾经有人问过,两个EXE,控件中的数据如何同步。
其实,VB中就有这样的例子, Coffee
但这个例子非常复杂,一般人不易看懂,其中讲了异步通知,多线程,回调,以及ActiveX exe 构件的原理。
这时我想将我写的异步通知演示的代码送给大家。你们一定会发现,这是由Coffee 简代而来。对的!!!AsynSvr.VBP
----------------------------------------
Type=OleExe
Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\WINNT\System32\stdole2.tlb#OLE Automation
Module=ModAsyn; ModAsyn.bas
Class=AsynMonitor; AsynMoitor.cls
Class=Connector; Connector.cls
Startup="(None)"
HelpFile=""
Title="AsynMonitor"
ExeName32="AsynMonitor.exe"
Command32=""
Name="AsynSvr"
HelpContextID="0"
Description="AsynDemo"
CompatibleMode="1"
CompatibleEXE32="AsynMonitor.exe"
MajorVer=1
MinorVer=0
RevisionVer=0
AutoIncrementVer=0
ServerSupportFiles=0
VersionCompanyName="Microsoft"
CompilationType=0
OptimizationType=0
FavorPentiumPro(tm)=0
CodeViewDebugInfo=0
NoAliasing=0
BoundsCheck=0
OverflowCheck=0
FlPointCheck=0
FDIVCheck=0
UnroundedFP=0
StartMode=1
Unattended=0
Retained=0
ThreadPerObject=0
MaxNumberOfThreads=1
DebugStartupOption=0[MS Transaction Server]
AutoRefresh=1[RVB]
DeleteClass1=AsynMonitor2
DeleteClass2=Connector2
DeleteClass3=IAsynNotify
_______________________________________________________AsynMoitor.cls
_______________________________________________________
VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "AsynMonitor"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
Option ExplicitEvent AsynReady(ByVal sData As String)Public Sub sDataInterChange(ByVal sData As String)    RaiseEvent AsynReady(sData)End Sub_______________________________________________________________
Connector.cls_______________________________________________________________
VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "Connector"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True
Option ExplicitDim AsynCount As IntegerPublic Property Get AsynMonitor() As AsynMonitor    AsynCount = AsynCount + 1
    If gAsynMonitor Is Nothing Then
        Set gAsynMonitor = New AsynMonitor
    End If
    Set AsynMonitor = gAsynMonitorEnd PropertyPrivate Sub Class_Terminate()
    AsynCount = AsynCount - 1
    If AsynCount = 0 Then
        Set AsynMonitor = Nothing
    End If
End Sub
_________________________________________________
ModAsyn.bas_________________________________________________
Attribute VB_Name = "ModAsyn"
Option ExplicitPublic gAsynMonitor As AsynMonitor

解决方案 »

  1.   

    _________________________________________________AsynClint.VBP
    ___________________________________________________
    Type=Exe
    Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\WINNT\System32\stdole2.tlb#OLE Automation
    Reference=*\G{EC762E77-606A-4953-A6C7-8E703A123172}#1.0#0#AsynMonitor.exe#AsynDemo
    Form=FrmAsyn.frm
    Module=ModAsynCli; ModAsynCli.bas
    Startup="Sub Main"
    HelpFile=""
    Command32=""
    Name="AsynClient"
    HelpContextID="0"
    Description="Test"
    CompatibleMode="0"
    MajorVer=1
    MinorVer=0
    RevisionVer=0
    AutoIncrementVer=0
    ServerSupportFiles=0
    VersionCompanyName="Microsoft"
    CompilationType=0
    OptimizationType=0
    FavorPentiumPro(tm)=0
    CodeViewDebugInfo=0
    NoAliasing=0
    BoundsCheck=0
    OverflowCheck=0
    FlPointCheck=0
    FDIVCheck=0
    UnroundedFP=0
    StartMode=0
    Unattended=0
    Retained=0
    ThreadPerObject=0
    MaxNumberOfThreads=1[MS Transaction Server]
    AutoRefresh=1[RVB]
    DeleteClass1=frmThread
    DeleteClass2=AsynTracker
    DeleteClass3=NotifyMe______________________________________________________FrmAsyn.frm______________________________________________________
    VERSION 5.00
    Begin VB.Form FrmAsyn 
       Caption         =   "AnsyDemo"
       ClientHeight    =   3750
       ClientLeft      =   1800
       ClientTop       =   1500
       ClientWidth     =   5430
       LinkTopic       =   "Form1"
       LockControls    =   -1  'True
       ScaleHeight     =   3750
       ScaleWidth      =   5430
       Begin VB.TextBox TxtSender 
          Height          =   765
          Left            =   270
          MultiLine       =   -1  'True
          TabIndex        =   4
          Top             =   2070
          Width           =   4845
       End
       Begin VB.CommandButton CmdExit 
          Caption         =   "EXIT"
          Height          =   375
          Left            =   3390
          TabIndex        =   2
          Top             =   3030
          Width           =   885
       End
       Begin VB.CommandButton CmdSend 
          Caption         =   "SEND"
          Enabled         =   0   'False
          Height          =   375
          Left            =   2205
          TabIndex        =   1
          Top             =   3030
          Width           =   885
       End
       Begin VB.CommandButton cmdEvents 
          Caption         =   "START"
          Height          =   375
          Left            =   1020
          TabIndex        =   0
          Top             =   3030
          Width           =   885
       End
       Begin VB.Label LabComment 
          Height          =   1065
          Left            =   300
          TabIndex        =   5
          Top             =   900
          Width           =   4785
       End
       Begin VB.Label LabReceive 
          BackColor       =   &H80000009&
          BorderStyle     =   1  'Fixed Single
          Height          =   675
          Left            =   270
          TabIndex        =   3
          Top             =   150
          Width           =   4845
       End
    End
    Attribute VB_Name = "FrmAsyn"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = False
    Option ExplicitPrivate WithEvents mwcmnEvents As AsynMonitor
    Attribute mwcmnEvents.VB_VarHelpID = -1Private mcctEvents As ConnectorPrivate Sub cmdEvents_Click()
        Static blnInUse As Boolean    If blnInUse Then
            Set mwcmnEvents = Nothing
            Set mcctEvents = Nothing
            cmdEvents.Caption = "START"
            CmdSend.Enabled = False
        Else
            Set mcctEvents = New Connector
            Set mwcmnEvents = mcctEvents.AsynMonitor
            cmdEvents.Caption = "STOP"
            CmdSend.Enabled = True
        End If    blnInUse = True Xor blnInUseEnd SubPrivate Sub CmdExit_Click()
        If Not mwcmnEvents Is Nothing Then
            Call cmdEvents_Click
        End If
    End SubPrivate Sub CmdSend_Click()
        If Len(TxtSender.Text) <> 0 Then
            mwcmnEvents.sDataInterChange TxtSender.Text
        End If
    End SubPrivate Sub Form_Load()    LabComment.Caption = "1、Please click the command button START. " & vbCrLf & _
        "2、Type some word in the text box then click the command button SEND and look what happens." & vbCrLf & _
         "Code By Bardo Keyo " & vbCrLf & _
        "Mail: [email protected] "End SubPrivate Sub Form_Unload(Cancel As Integer)
        If Not mwcmnEvents Is Nothing Then
            Call cmdEvents_Click
        End If
    End SubPrivate Sub mwcmnEvents_AsynReady(ByVal sData As String)    LabReceive.Caption = sDataEnd Sub_____________________________________________________________ModAsynCli.bas______________________________________________________________
    Attribute VB_Name = "ModAsynCli"
    Option ExplicitSub Main()
        If App.StartMode = vbSModeStandalone Then
            FrmAsyn.Show
        End If
    End Sub说明:
    以上共七个文件。注意,线下面是文件的首行。要按此复制存为相应的文件名。
    必须这么做,否则属性不对,则无法运行。先打开一个VB,将AsynSvr.vbp 运行然后才可以打开另一个VB,将 AsynClient.vbp 引用后,再次运行。
    按F8单步,即可以发现其原理。
    如果先将AsynSvr.vbp 生成Activex EXE,
    再将 AsynClient.vbp编译两个不同名的EXE, 则两个或多个EXE之间可以通信。但愿大家喜欢!!
      

  2.   

    分一点点会来的,不要认为自己不行,永远要自信。
        试着回答一下别人的问题,不论大小会使你进步。to  shawls(小山(坚持VB,学VB.net和C#)) :
        用COM来实现多线程,回调,异步通讯本来就是官方推荐的方法,是每一
    个学VB的人都应该搞懂的。关于这方面的问题,VB的文档讲得还是不错的。
       不过,在VB里用COM还有局限,还有很多需要我们去突破的Limits。
       就异步通讯,我的研究已经有近十种方法了,COM不过只是一种。