首页 > 解决方案 > WPF 用户界面在不移动鼠标的情况下不更新

问题描述

我正在使用后台工作来加载一些内容,但发生了一些非常奇怪的事情,UI 没有更新,它只是突然开始发生,下面是代码

这是按钮点击

 public void CarregaPaginaCTeTomador(object sender, RoutedEventArgs e)
    {

        if (ClassControleInstancia.CTeTomador == null)
        {
            ClassControleInstancia.CTeTomador = new Page_CTE_Tomador();
        }
        BackgroundWorker LoadPageWorker = new BackgroundWorker();
        LoadPageWorker.DoWork += LoadPageWorker_DoWorkCteTomador;
        LoadPageWorker.RunWorkerCompleted += LoadPageWorker_RunWorkerCompleted;
        LoadPageWorker.RunWorkerAsync();

    }

这是1°背景工作

private void LoadPageWorker_DoWorkCteTomador(object sender, DoWorkEventArgs e)
    {
        Console.WriteLine("Antes do DoEvents");
        System.Windows.Forms.Application.DoEvents();
        Console.WriteLine("Apos o DoEvents");
        ClassControleInstancia.JanelaPrincipal.Dispatcher.Invoke(() =>
        {
            _mainFrame.Navigate(ClassControleInstancia.CTeTomador);
            ClassControleInstancia.CTeTomador.RefreshContent();
        });
    }

private void LoadPageWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        WaitNSeconds(80);
        FrameCurrentPage();

    }

在这个 ClassControleInstancia.CTeTomador.RefreshContent(); 还有其他背景工作应该是ui被囤积的原因吗?因为我没有看到我发疯的代码有任何问题,因为我已经尝试删除 bgwork,但它仍然有库存。

另一个bgwork是

private void CarregaGrid(int pagina, int quantidade, int TipoArquivo, int AscDesc, bool inognoreNot = false) //0 crescente 1 desc
    {
        //show the loader
        ClassControleInstancia.JanelaPrincipal.Loader.Visibility = Visibility.Visible;
        ClassControleInstancia.JanelaPrincipal.Loader_Abort.Visibility = Visibility.Hidden;
        ClassControleInstancia.JanelaPrincipal.Loader_text.Visibility = Visibility.Hidden;
        ClassControleInstancia.JanelaPrincipal.Loader_porgress.Visibility = Visibility.Hidden;

        BackgroundWorker GridLoader = new BackgroundWorker();
        GridLoader.DoWork += GridLoader_DoWork;
        GridLoader.RunWorkerCompleted += GridLoader_RunWorkerCompleted;
        GridLoader.RunWorkerAsync();

    }

private void GridLoader_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        dgUsers.Items.Refresh();
        ClassControleInstancia.JanelaPrincipal.Loader.Visibility = Visibility.Hidden;
        ButtonsSelector config = new ButtonsSelector();
        config.OnViewStart(TipoArquivoOrdenacaoEnum.CTE_NaoTomador, botoesSelector(), "cte-nao-tomador");
    }

    private void GridLoader_DoWork(object sender, DoWorkEventArgs e)
    {
        Dispatcher.Invoke((() =>
        {
            ClassControleInstancia.JanelaPrincipal.Loader_percentage.Width = new GridLength(0);
        }));

        CurrentPage = GridParams.Pagina;
        CurrentMaxRows = GridParams.QuantidadePorPagina;
        ObjSenhaWebApi Senha = new ObjSenhaWebApi(Conexao.ARQBancoDeDados().BuscaSenhaWebApiUsuario());
        ObjPesquisaNotas PesquisaNotas = new ObjPesquisaNotas();
        PesquisaNotas.IdEmpresa = ClassControleInstancia.EmpresaSelecionada.EMP_SEQUENCIA_ORI;
        PesquisaNotas.Pagina = GridParams.Pagina;
        PesquisaNotas.QntdMostrar = GridParams.QuantidadePorPagina;
        PesquisaNotas.Ordenacao = GridParams.TipoArquivo;
        PesquisaNotas.CrescenteDecrescente = GridParams.IsAscDesc;
        PesquisaNotas._ObjListaParametrosNfeSaida = new ObjListaParametrosNfeSaida();
        PesquisaNotas._ObjListaParametrosNfeSaida.UsuarioId = Conexao.ARQBancoDeDados().BuscaSequenciaClienteOri();
        PesquisaNotas.tipoTomador = 1;

        #region CamposDaPesquisa

        P_ADICIONA_CAMPOS_PESQUISA(PesquisaNotas);

        #endregion

        int V_EMPRESA = 0;
        string V_NUMERO_NOTA = "";

        Dispatcher.Invoke((Action)(() => V_NUMERO_NOTA = EDT_NUMERO_NOTA.Text.Trim()));


        if (ClassControleInstancia.EmpresaSelecionada != null)
        {
            V_EMPRESA = ClassControleInstancia.EmpresaSelecionada.EMP_SEQUENCIA;
            string V_FORNECEDOR = "";
            Dispatcher.Invoke((Action)(() => V_FORNECEDOR = CbFornecedor.Text.ToString()));

            Dispatcher.Invoke((Action)(() => dgUsers.ItemsSource = null));




            List<Cte> ListaNotas = ArquivarNfeRest.ArquivarNfeRest.BuscaNotaSaida<Cte>(Senha, PesquisaNotas);
            if (ListaNotas != null)
            {
                if (ListaNotas.Count() > 0)
                {
                    Dispatcher.Invoke((Action)(() => nuvenzita_no_itens.Visibility = Visibility.Hidden));
                }
                else
                {
                    Dispatcher.Invoke((Action)(() => nuvenzita_no_itens.Visibility = Visibility.Visible));
                }
            }
            else
            {
                Dispatcher.Invoke((Action)(() => nuvenzita_no_itens.Visibility = Visibility.Visible));
            }
            //Colocar em negrito todos os matchs com a outra lista

            List<string> ListaNegrito = ClassControleListaNegrito.BuscaLista(ClassControleInstancia.EmpresaSelecionada.EMP_SEQUENCIA, TipoArquivoOrdenacaoEnum.CTE_NaoTomador, true).ValorLista;

            foreach (var item in ListaNotas)
            {
                foreach (var item2 in ListaNegrito)
                {
                    if (item2 == item.CteSequencia.ToString())
                    {
                        item.NEGRITO = true;
                    }
                }
            }

            ObjRetornoCount _ObjRetornoCount = ArquivarNfeRest.ArquivarNfeRest.BuscaQntdNotaSaida<Cte>(Senha, PesquisaNotas);
            int QntdPaginas = _ObjRetornoCount.QntdPaginas;
            int QntdNotas = _ObjRetornoCount.QntdTotal;


            //Retira aviso vermelho (confima letura)
            if (GridParams.IgnorarAlerta != true)
            {
                ClassDoReadNotification<Cte>.Verify();
                ClassControleInstancia.Notifications.IsCteNaoTomadorRead = 1;
                ClassControleInstancia.JanelaPrincipal.AlertaNovasNotas();
            }

            Dispatcher.Invoke((Action)(() =>
            {
                totalItensFiltrados = QntdNotas;
                itensNoFiltro = ListaNotas;
                if (VerificaSeTemFiltro() == 0)
                {
                    paginatorTotal.Content = "Nº Total Doctos: " + (QntdNotas);
                }
                else
                {
                    paginatorTotal.Content = "Nº Total Doctos Filtrados: " + (QntdNotas);
                }
                Pagenizer.getButtons(footer, QntdPaginas, CurrentPage, CurrentMaxRows, "cte-nao-tomador");


            }));
            //List<ObjSincronizados> ListaNotas = Conexao.ARQBancoDeDados().BuscaListaSincronizados(V_EMPRESA, V_NUMERO_NOTA, V_DATA_INICIAL, V_DATA_FINAL, V_FORNECEDOR);
            Dispatcher.Invoke((Action)(() => dgUsers.ItemsSource = ListaNotas));
            Dispatcher.Invoke((Action)(() =>
            {
                int tt = dgUsers.Items.OfType<Cte>().Where(x => x.MARCADO == true).Count();
                int ttAll = dgUsers.Items.OfType<Cte>().Where(x => x.MARCADO == true || x.MARCADO == false).Count();
                btCounter.Content = "Selecionados " + tt.ToString() + " de " + ttAll.ToString();
                headerCheckBox.IsChecked = false;
            }
            ));
        }


    }

标签: c#wpfbackgroundworker

解决方案


推荐阅读