Pergunta

Eu li outras perguntas relacionadas, mas não consigo fazer com que elas se relacionem com isso, então achei melhor perguntar: Sou muito novo no WPF e assim por diante, por favor, tenha paciência comigo.

estou usando isso http://www.codeproject.com/KB/WPF/wpf_notifyicon.aspx API para trabalhar com Windows WPF personalizado (em particular FancyBalloon).

No entanto, estou me deparando com o seguinte problema: não consigo iniciar o BalloonTips em um tópico separado (preciso disso porque estou analisando e-mails e, portanto, se houver 3 e-mails, por exemplo, ele exibe o primeiro e-mail (que funciona tudo bem), mas quando se trata do segundo e-mail ele trava com um TargetInvocationException , {"O elemento especificado já é o filho lógico de outro elemento.Desconecte-o primeiro."}.

O problema é que supostamente estou trabalhando com a mesma instância e tentei chamá-la para fechá-la antes, descartá-la etc., mas sem sucesso.(então, novamente, se eu descartá-lo, não posso criar outra instância, pois aparentemente os componentes da interface do usuário do WPF devem ser chamados a partir de um thread estático, portanto, durante o loop de e-mails + exibição do balão, estou tentando usar o mesmo BalloonTip.

Alguma sugestão, por favor?Estou realmente perdido aqui e já estou nisso há um bom tempo :/

Eu queria saber se havia alguém

Foi útil?

Solução

Em geral, os controles WPF devem ser acessados ​​e atualizados somente no thread de UI principal.Existem verificações de afinidade de thread em todas as entranhas da vinculação de dados que gerarão uma exceção se você atribuir a uma propriedade vinculada a dados de qualquer thread que não seja o thread da UI do WPF, por exemplo.

Você pode remover o código da UI do thread de trabalho em segundo plano ou fazer uso criterioso de um SynchronizationContext para invocar trechos de código do thread de segundo plano para execução no thread da UI.

Se você é novo no WPF ou no threading, você deve manter o material da UI fora dos threads em segundo plano.O WPF tem bastante complexidade para mantê-lo ocupado sem adicionar a dor de cabeça adicional de problemas de threading ao mix.

Outras dicas

Parece que você está adicionando o mesmo elemento da interface do usuário a vários contêineres pais ao mesmo tempo.

Por exemplo, se eu tentar mystackpanel.children.add (myuielement) simultaneamente em threads separados, referindo -se ao mesmo objeto de elemento da interface do usuário, isso causaria o erro que você está vendo.

Se você precisar dos mesmos elementos da interface do usuário para vários threads, considere cloná -los ou mover sua lógica da interface do usuário para o encadeamento principal.

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