private void CmdTest_OnClick(object sender, RoutedEventArgs e)
        {
            var bg = new BackgroundWorker() {WorkerReportsProgress = true};
            bg.ProgressChanged += (o, args) => m_waitingWindow.SetState(args.UserState);
            bg.DoWork += (o, args) =>
                {
                    var w = (BackgroundWorker) o;

                    w.ReportProgress(0, "Ожидание");
                    System.Threading.Thread.Sleep(1000);

                    w.ReportProgress(0, "Открытие диалога");
                    var h = this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
                        {
                            var f = new CustomersSelectionWindow(this);
                            f.ShowDialog();
                        }));
                    h.Wait();

                    w.ReportProgress(0, "Ожидание");
                    System.Threading.Thread.Sleep(1000);
                };
            bg.RunWorkerCompleted += (o, args) =>
                {
                    m_waitingWindow.Close();
                    m_waitingWindow = null;
                    if (args.Error != null)
                    {
                        this.ShowError(args.Error.Message);
                    }
                };
            bg.RunWorkerAsync();

            m_waitingWindow = new WaitingWindow(this);
            m_waitingWindow.ShowDialog();
        }
 private void cmdOpenCustomrsList_OnClick(object sender, RoutedEventArgs e)
 {
     var f = new CustomersSelectionWindow(this);
     f.ShowDialog();
 }
        private void btnAddCutomerToProductClickHandler(object sender, RoutedEventArgs e)
        {
            var f = new CustomersSelectionWindow(this);
            f.ShowDialog();
            var selectedCustomer = f.GetSelectedCustomer();
            if (selectedCustomer == null)
            {
                //this.ShowError("Необходимо выбрать минимум одного покупателя из списка.");
                return;
            }
            var order = new Order
                        {
                            Amount = 0,
                            CustomerId = selectedCustomer.Id,
                            Date = DateTime.Now,
                            InitialVkCommentId = 0,
                            ProductId = m_product.Id,
                            Comment = ""
                        };
            var caw = new ChangeAmountWindow(this, order);
            caw.ShowDialog();

            m_bgworker = new BackgroundWorker();
            m_bgworker.DoWork += (o, args) =>
                {
                    var ord = args.Argument as Order;
                    var ordersRepo = Core.Repositories.DbManger.GetInstance().GetOrderRepository();
                    try
                    {
                        var allProductOrders = ordersRepo.GetOrdersForProduct(m_product);
                        if (allProductOrders.Any(productOrder => productOrder.CustomerId == ord.CustomerId))
                        {
                            throw new BgWorkerException("Указанный покупатель уже заказывал данный товар!");
                        }
                    }
                    catch (BgWorkerException)
                    {
                        throw;
                    }
                    catch (Exception)
                    {
                        throw new BgWorkerException("Не удалось получить данные из БД");
                    }
                    try
                    {
                        ordersRepo.Add(order);
                    }
                    catch (Exception)
                    {
                        throw new BgWorkerException("Не удалось сохранить информацию о заказе в БД");
                    }

                    args.Result = new ProductCustomerListViewItem(order, selectedCustomer);
                };
            m_bgworker.RunWorkerCompleted += (o, args) =>
                {
                    if (args.Error != null)
                    {
                        this.ShowError(args.Error.Message);
                        return;
                    }
                    var item = (ProductCustomerListViewItem) args.Result;
                    m_lvi.OrderedAmount += item.SourceOrderInfo.Amount;
                    lvOrderItems.Items.Add(item);
                };

            m_bgworker.RunWorkerAsync(order);
        }