Use o segmento interface do usuário de um aplicativo WPF para fazer uma tarefa de processamento longa sobre um elemento de interface do usuário, mas também atualizar uma barra de progresso na mesma janela

StackOverflow https://stackoverflow.com/questions/1425969

Pergunta

Meu programa consiste em um grande controle de gráficos UI que eu preciso gastar cerca de 15 segundos re-carregamento de vez em quando. Como o código de atualização trabalha principalmente com o controle de UI (talvez 90% do que realmente define propriedades no controle), não faria sentido para mim para realmente deixar o fio alça UI isso. Eu realmente não quero o controle visualmente re-pintura, enquanto ele está carregando em um segmento separado a partir da interface do usuário.

Eu também quero uma barra de progresso para atualizar assim que a vida na barra de status da mesma janela do aplicativo. Existe uma maneira de quebrar a regra neste caso e re-pintar apenas a barra de progresso, ou devo apenas abrir uma nova janela do aplicativo para a barra de progresso para viver?

O que você faria neste caso particular?

Foi útil?

Solução

Se você pode quebrar a sua tarefa primária (isto é. Atualizar o gráfico), em muitos passos, você pode executar cada etapa como uma mensagem de despachante separado. Isso permitirá que outras mensagens para ser processado, inclusive dando-lhe a capacidade de informações de atualização de progresso.

O padrão básico é:

  1. Invoke sua tarefa principal, passando de zero para a etapa.
  2. Execute o passo.
  3. Se há mais etapas, a fila outra mensagem, passando na etapa + 1.

Você pode então adicionar em atualizações de progresso nos pontos apropriados em seu código.

PS. Não estou dizendo que esta é a sua melhor opção - difícil dizer sem saber todos os detalhes. Mas esta é uma opção.

Outras dicas

Não é verdade que há apenas uma UI enfiar em uma aplicação, é justo que a maioria dos aplicativos do Windows sempre apenas criar UI objetos em um segmento para esta discussão se torna "o" segmento interface do usuário na aplicação. É fácil entender por que -. O que torna o código mais simples de entender, e nos protege de implícita fio problemas de ligação entre os controlos

Isto sugere uma possível ideia, se tal se revelar impossível de melhorar a velocidade de atualização do controle (que é o que eu gostaria de sugerir a fazer em primeiro lugar). Criar o controle UI em um segmento separado. Você precisa ter certeza de que o fio é adequado para UI, que seja o modelo de segmentação é STA , e que vai bombear mensagens e não morrer antes que o controle é destruído. Eu não sei se você precisa criar a janela pai no segmento interface do usuário, bem como, ou apenas o controle, mas pode valer a pena experimentar aqui.

Encontre um controle graficamente UI que é mais eficiente. A menos que os rendimentos segmento interface do usuário para o loop de mensagem quaisquer outras actualizações não vai acontecer (e ele vai abrandar atualizações do seu controle gráfico).

Gostaria de sugerir o uso de uma barra de progresso em uma nova janela (sem os cabeçalhos de formulário). Torná-lo pintar a barra de progresso através da leitura das propriedades compartilhadas de um controle gráfico. Desta forma, você pode evitar o fio de bloqueio (carregamento lento) .. E dá-lhe boa experiência visual (pintura progressiva em ambos os controles).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top