/// <summary>
        /// Sample code to invoke the OrderFetcher to retrieve Orders and OrderItems.
        /// </summary>
        /// <param name="service">MarketplaceWebServiceOrders object.</param>
        public static void InvokeOrderFetcherSample(MarketplaceWebServiceOrders service, string sellerId, string[] marketplaceIdList)
        {
            OrderFetcher fetcher = new OrderFetcher(service, sellerId, marketplaceIdList);

            // Process each order as it comes in
            fetcher.ProcessOrder += delegate(Order order)
            {
                Console.WriteLine(order.ToString());
                // Fetch the order items in each order
                fetcher.FetchOrderItems(order.AmazonOrderId, delegate(OrderItem item)
                {
                    // Process order item here.
                    Console.WriteLine("\t" + item.ToString());
                });

                Console.WriteLine("=================================================");
                Console.WriteLine();
            };

            // Fetch all orders from 1 day ago
            fetcher.FetchOrders(DateTime.Now.Subtract(TimeSpan.FromDays(1)));
        }
        /// <summary>
        /// Sample code to invoke the OrderFetcher to retrieve Orders and OrderItems.
        /// </summary>
        /// <param name="service">MarketplaceWebServiceOrders object.</param>
        public static void InvokeOrderFetcherSample(MarketplaceWebServiceOrders service, string sellerId, string[] marketplaceIdList)
        {
            OrderFetcher fetcher = new OrderFetcher(service, sellerId, marketplaceIdList);

            // Process each order as it comes in
            fetcher.ProcessOrder += delegate(Order order)
            {
                Console.WriteLine(order.ToString());
                // Fetch the order items in each order
                fetcher.FetchOrderItems(order.AmazonOrderId, delegate(OrderItem item)
                {
                    // Process order item here.
                    Console.WriteLine("\t" + item.ToString());
                });

                Console.WriteLine("=================================================");
                Console.WriteLine();
            };

            // Fetch all orders from 1 day ago
            fetcher.FetchOrders(DateTime.Now.Subtract(TimeSpan.FromDays(1)));
        }
        /// <summary>
        /// Method to continuously check orders over an interval, and list OrderItems for those Orders.
        /// </summary>
        private void OrdersJobThread(object obj)
        {
            orderFetcher.ProcessOrder += HandleOrder;

            if (this.CheckOrdersInterval == TimeSpan.MinValue)
            {
                throw new ArgumentException("The CheckOrdersInterval TimeSpan cannot be zero.", "CheckOrdersInterval");
            }

            DateTime startCheckInterval = DateTime.Now.Subtract(CheckOrdersInterval);

            // Continue forever until the isRunning flag is cleared.
            while (isRunning)
            {
                try
                {
                    // Check the orders for this interval.
                    DateTime checkInterval = startCheckInterval;
                    startCheckInterval = DateTime.Now.Subtract(TimeSpan.FromMinutes(3.0));

                    Console.WriteLine("Fetching orders from " + checkInterval.ToString() + " to " + startCheckInterval.ToString());
                    orderFetcher.FetchOrders(checkInterval, startCheckInterval);

                    // Wait for the next interval.
                    Console.WriteLine("Fetch complete.  Sleeping until next interval.");
                    while (isRunning && DateTime.Now.Subtract(startCheckInterval) < CheckOrdersInterval)
                    {
                        Thread.Sleep(1000);
                    }
                }
                catch (Exception err)
                {
                    Console.WriteLine("Error: " + err.Message + ".  Orders job thread is exiting.");
                    isRunning = false;
                }
            }
        }