public void GetUpdateGMISetting(string IPList, ObservableCollection <GetGMUPosDetailsResult> result,
                                        Func <GetGMUPosDetailsResult, bool> doWork, Action afterWork)
        {
            try
            {
                SynchronizationContext ctx = SynchronizationContext.Current;
                InnerWork work             = new InnerWork()
                {
                    Context   = ctx,
                    DoWork    = doWork,
                    AfterWork = afterWork
                };

                new Thread(new ParameterizedThreadStart((o) =>
                {
                    InnerWork innerWork = (InnerWork)o;

                    try
                    {
                        ISingleResult <GetGMUPosDetailsResult> collection = dbAccess.GetGMUPosDetails(IPList);

                        if (collection != null)
                        {
                            foreach (var item in collection)
                            {
                                try
                                {
                                    if (innerWork.DoWork(item))
                                    {
                                        innerWork.Context.Send((c) =>
                                        {
                                            result.Add((GetGMUPosDetailsResult)item);
                                        }, null);
                                    }
                                    Thread.Sleep(100);
                                }
                                catch (Exception ex)
                                {
                                    ExceptionManager.Publish(ex);
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        ExceptionManager.Publish(ex);
                    }
                    finally
                    {
                        if (innerWork.AfterWork != null)
                        {
                            innerWork.Context.Send((c) =>
                            {
                                innerWork.AfterWork();
                            }, null);
                        }
                    }
                }
                                                        )).Start(work);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public void GetUpdateGMISetting(string IPList, ObservableCollection<GetGMUPosDetailsResult> result,
            Func<GetGMUPosDetailsResult, bool> doWork, Action afterWork)
        {
            try
            {
                SynchronizationContext ctx = SynchronizationContext.Current;
                InnerWork work = new InnerWork()
                {
                    Context = ctx,
                    DoWork = doWork,
                    AfterWork = afterWork
                };

                new Thread(new ParameterizedThreadStart((o) =>
                {
                    InnerWork innerWork = (InnerWork)o;

                    try
                    {
                        ISingleResult<GetGMUPosDetailsResult> collection = dbAccess.GetGMUPosDetails(IPList);

                        if (collection != null)
                        {
                            foreach (var item in collection)
                            {
                                try
                                {
                                    if (innerWork.DoWork(item))
                                    {
                                        innerWork.Context.Send((c) =>
                                        {
                                            result.Add((GetGMUPosDetailsResult)item);
                                        }, null);
                                    }
                                    Thread.Sleep(100);
                                }
                                catch (Exception ex)
                                {
                                    ExceptionManager.Publish(ex);
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        ExceptionManager.Publish(ex);
                    }
                    finally
                    {
                        if (innerWork.AfterWork != null)
                        {
                            innerWork.Context.Send((c) =>
                            {
                                innerWork.AfterWork();
                            }, null);
                        }
                    }
                }
                )).Start(work);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }