0

他の関連する質問を読んだことがありますが、実際にこれに関連させることができないので、WPFにかなり慣れていないなど、質問するのが最善だと思いました。ご容赦ください。

このhttp://www.codeproject.com/KB/WPF/wpf_notifyicon.aspxAPIを使用して、カスタムWPF Windows(特にFancyBalloon)を操作しています。

ただし、次の問題が発生しています。別のスレッドでBalloonTipsを開始できないようです(メールを解析しているため、これが必要です。たとえば、メールが3つある場合は、最初のメールが表示されます(これは機能します)。罰金)、しかし、2番目の電子メールに関しては、TargetInvocationExceptionでクラッシュします、{"指定された要素はすでに別の要素の論理的な子です。最初に切断してください。"}。

物事は、おそらく同じインスタンスで作業していて、以前にそれを閉じたり、破棄したりするためにそれを呼び出しようとしましたが、役に立ちませんでした。(その後、破棄すると、WPF UIコンポーネントを静的スレッドから呼び出す必要があるため、別のインスタンスを作成できません。そのため、電子メールのループとバルーンの表示全体で、同じBalloonTipを使用しようとしています。

何か提案はありますか?私はここで本当に途方に暮れていて、私はかなり長い間それに取り組んできました:/

誰かいるのかなぁと思った

4

2 に答える 2

2

一般に、WPFコントロールは、メインUIスレッドでのみアクセスおよび更新する必要があります。たとえば、WPF UIスレッドではないスレッドからデータバインドされたプロパティに割り当てると、例外をスローするデータバインディング内部全体にスレッドアフィニティチェックがあります。

バックグラウンドワーカースレッドからUIコードを削除するか、SynchronizationContextを適切に使用して、バックグラウンドスレッドからコードのスニペットを呼び出してUIスレッドで実行することができます。

WPFを初めて使用する場合、またはスレッドを初めて使用する場合は、UIをバックグラウンドスレッドから除外する必要があります。WPFには、スレッドの問題という追加の問題をミックスに追加することなく、忙しくするための複雑さがたくさんあります。

于 2010-04-01T00:57:04.050 に答える
1

同じUI要素を複数の親コンテナに同時に追加しているようです。

たとえば、myStackPanel.Children.Add(myUIElement)を別々のスレッドで同時に試行し、同じUI要素オブジェクトを参照すると、表示されているエラーが発生します。

複数のスレッドに同じUI要素が必要な場合は、それらのクローンを作成するか、UIロジックをメインスレッドに移動することを検討してください。

于 2010-04-01T00:56:21.933 に答える