	private: System::Void SendMultiOUT_btn_Click(System::Object^  sender, System::EventArgs^  e) {
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------BEGIN CUT AND PASTE BLOCK-----------------------------------------------------------------------------------
		SendMultiOUT_btn->Enabled = FALSE;	//Grey the button out until the operation completes.
		BulkOut_btn->Enabled = FALSE;		//Grey the button out until the operation completes.

		DWORD TimeTickerStartValue;
		DWORD TimeTickerStopValue;
		DWORD CumulativeBytesXferred = 0;
		ULONG BytesRead2 = 0;
		UCHAR BooleanVar = TRUE;
		unsigned char InputPacketBuffer2[64000];

		OVERLAPPED OverlappedReadStructure2;

		HANDLE IOEvent2 = CreateEvent(NULL, TRUE, FALSE, NULL);	//Manual reset, initially non-signalled state


		DataXfer_chkbx->Checked = TRUE;

		TimeTickerStartValue = GetTickCount();	

		for(unsigned int i = 0; i < 5; i++)
		{
			//Initialize the events and overlapped structures to their proper states before we use them.
			ResetEvent(IOEvent);
			ResetEvent(IOEvent2);
			ResetEvent(IOEvent3);

			OverlappedWriteStructure.Internal = 0;
			OverlappedWriteStructure.InternalHigh = 0;
			OverlappedWriteStructure.Offset = 0;
			OverlappedWriteStructure.OffsetHigh = 0;
			OverlappedWriteStructure.Pointer = 0;
			OverlappedWriteStructure.hEvent = IOEvent;

			OverlappedReadStructure2.Internal = 0;
			OverlappedReadStructure2.InternalHigh = 0;
			OverlappedReadStructure2.Offset = 0;
			OverlappedReadStructure2.OffsetHigh = 0;
			OverlappedReadStructure2.Pointer = 0;
			OverlappedReadStructure2.hEvent = IOEvent2;

			OverlappedWriteStructure3.Internal = 0;
			OverlappedWriteStructure3.InternalHigh = 0;
			OverlappedWriteStructure3.Offset = 0;
			OverlappedWriteStructure3.OffsetHigh = 0;
			OverlappedWriteStructure3.Pointer = 0;
			OverlappedWriteStructure3.hEvent = IOEvent3;

			//Actually start sending the data.
			//HighBandwidthWinUSB::WinUsb_WritePipe(MyWinUSBInterfaceHandle, 0x01, &OutputPacketBuffer[0], 64000, &BytesWritten, &OverlappedWriteStructure);		//Send data OUT (of the host) on endpoint 1 (pipe ID = 0x01)
			HighBandwidthWinUSB::WinUsb_ReadPipe(MyWinUSBInterfaceHandle, 0x82, &InputPacketBuffer2[0], 64000, &BytesRead2, &OverlappedReadStructure2);  //Send data OUT (of the host) on endpoint 2 (pipe ID = 0x02)
			//HighBandwidthWinUSB::WinUsb_WritePipe(MyWinUSBInterfaceHandle, 0x03, &OutputPacketBuffer3[0], 64000, &BytesWritten3, &OverlappedWriteStructure3);  //Send data OUT (of the host) on endpoint 3 (pipe ID = 0x03)
			
			//Wait for the data to finish being transferred.
		
			WaitForSingleObject(IOEvent2, 9000);	//Blocking function until complete or timeout occurs.
			

			//Alternative method of waiting until the data is finished being transferred.
			//while(!HasOverlappedIoCompleted(&OverlappedWriteStructure) || !HasOverlappedIoCompleted(&OverlappedWriteStructure2) || !HasOverlappedIoCompleted(&OverlappedWriteStructure3));

			//At this point, all of the data was sent (assuming no error conditions, ex: user unplugged 
			//the USB cable during the transmission).  A complete application should ideally use error case 
			//checking/handling code to ensure a smooth user experience, even in the event of the unexpected.

			CumulativeBytesXferred += OverlappedWriteStructure.InternalHigh;
			CumulativeBytesXferred += OverlappedReadStructure2.InternalHigh;
			CumulativeBytesXferred += OverlappedWriteStructure3.InternalHigh;

			BytesWritten = 0;	
			BytesRead2 = 0;	
			BytesWritten3 = 0;	
		}		
		TimeTickerStopValue = GetTickCount();
		DataXfer_chkbx->Checked = FALSE;

		TimeTickerStopValue = TimeTickerStopValue - TimeTickerStartValue;

		ElapsedTime_txtbx->Text = TimeTickerStopValue.ToString();

		DWORD	BytesPerSecond;
		if(TimeTickerStopValue == 0)
			TimeTickerStopValue = 1;
		BytesPerSecond = (DWORD)(((CumulativeBytesXferred * 1000)/TimeTickerStopValue));
		Bandwidth_txtbx->Text = BytesPerSecond.ToString();

		CloseHandle(IOEvent);
		CloseHandle(IOEvent2);
		CloseHandle(IOEvent3);

		BulkOut_btn->Enabled = TRUE;		//Un-grey out the button.
		SendMultiOUT_btn->Enabled = TRUE;	//Un-grey out the button.

