Index: Source/Boxes.cobra
===================================================================
--- Source/Boxes.cobra	(revision 2285)
+++ Source/Boxes.cobra	(working copy)
@@ -1489,9 +1489,12 @@
 		assert .parentBox or .parentNameSpace
 
 	def _bindInt
-		m = Method(.token, .token, this, 'invoke', List<of Param>(.params), .returnType ? .returnTypeProxy, nil, List<of String>(.isNames), AttributeList(), '')
-		m.statements.add(ThrowStmt(.token, PostCallExpr(.token, IdentifierExpr(.token, 'Exception'), List<of Expr>()))) # just to avoid a Cobra warning during .bindImp
-		.addDecl(m)
+		returnType as ITypeProxy = .returnType ? .returnTypeProxy
+		.addDecl(_synthMethod('invoke', List<of Param>(.params), returnType))
+		vparam = Param('vParam', VariTypeIdentifier(.token, TypeIdentifier(.token, DynamicType())))
+		params = [vparam] 	# dynamic type vari length param in list as placeholder for multiple params 
+		.addDecl(_synthMethod('beginInvoke', params, TypeIdentifier(.token.copy('ID', 'IAsyncResult')) to ITypeProxy))
+		.addDecl(_synthMethod('endInvoke',   params, returnType ))
 		base._bindInt
 		for param in .params
 			param.bindInt
@@ -1501,7 +1504,12 @@
 	def _makeInitializer is override
 		pass
 
-
+	def _synthMethod(name as String, params as List<of Param>?, returnTypeProxy as ITypeProxy) as Method
+		m = Method(.token, .token, this, name, params, returnTypeProxy, nil, List<of String>(.isNames), AttributeList(), '')
+		m.statements.add(ThrowStmt(.token, PostCallExpr(.token, IdentifierExpr(.token, 'Exception'), List<of Expr>()))) 
+			# method body just to avoid a Cobra warning during .bindImp
+		return m
+		
 class GenericParam inherits CobraType is partial
 	"""
 	A generic parameter *is* a type.
Index: Tests/220-delegates-etc/100-delegates/160-asyncThd.cobra
===================================================================
--- Tests/220-delegates-etc/100-delegates/160-asyncThd.cobra	(revision 0)
+++ Tests/220-delegates-etc/100-delegates/160-asyncThd.cobra	(revision 0)
@@ -0,0 +1,52 @@
+"""
+Cobra xlation of sample fm http://msdn.microsoft.com/en-us/library/2e08f6yc.aspx
+Test Ticket#196 - ability to compile when using {begin,end}Invoke
+"""
+use System.Threading 
+
+class AsyncDemo 
+	#// The method to be executed asynchronously.
+    def testMethod(callDuration as int, threadId as out int ) as String
+		#Console.writeLine("Test method begins.")
+		Thread.sleep(callDuration)
+        threadId = Thread.currentThread.managedThreadId
+        return String.format("My call time was {0}.", callDuration.toString) to !
+
+    #// The delegate must have the same signature as the method
+    #// it will call asynchronously.
+    #public delegate string AsyncMethodCaller(int callDuration, out int threadId);
+sig AsyncMethodCaller(callDuration as int, threadId as out int) as String
+	
+
+class AsyncMain 
+	def main is shared
+        
+    	# The asynchronous method puts the thread id here.
+        threadId as int
+
+        # Create an instance of the test class.
+        ad = AsyncDemo()
+
+        # Create the delegate.
+        caller as AsyncMethodCaller = AsyncMethodCaller(ref ad.testMethod)
+
+        # Initiate the asychronous call.
+        result = caller.beginInvoke(3000, out threadId, nil, nil)
+        #result as IAsyncResult = sharp'caller.BeginInvoke(3000, out threadId, null, null)'
+
+        Thread.sleep(0)
+        #Console.writeLine("Main thread {0} does some work.",  Thread.currentThread.managedThreadId)
+
+        # Call EndInvoke to wait for the asynchronous call to complete,
+        # and to retrieve the results.
+        returnValue as String = caller.endInvoke(out threadId, result)
+        #returnValue as String = sharp'caller.EndInvoke(out threadId, result)'
+
+        assert threadId == 3
+        assert returnValue == 'My call time was 3000.'
+		#Console.writeLine('The call executed on thread {0}, with return value "{1}".',  
+		#	threadId, returnValue)
+        CobraCore.noOp(caller, result) # suppress warnings around params to sharp'{begin,end}Invoke'
+    
+
+	
Index: Developer/IntermediateReleaseNotes.text
===================================================================
--- Developer/IntermediateReleaseNotes.text	(revision 2285)
+++ Developer/IntermediateReleaseNotes.text	(working copy)
@@ -431,3 +431,5 @@
 * Fixed: An uncaught exception can occur for some library calls.
 
 * Fixed: Cannot instantiate generic params under some circumstances.
+
+* Fixed: Cobra compile failure on delegates calling .{begin,end}Invoke. Ticket#196

