Observable Lists を使用するアプリを作成しました。私は ObservableList クラスをスレッドセーフにしました (私が思うに)、それは私のアプリケーションでうまく機能しています。
今、アプリケーションをサービスとしてインストールしようとしています。何かがリストに追加されるまでは、これも問題なく機能します。そこのスレッドは死んでいると思います。私は次のコードを持っています:
/// <summary>
/// Creates a new empty ObservableList of the provided type.
/// </summary>
public ObservableList()
{
//Assign the current Dispatcher (owner of the collection)
_currentDispatcher = Dispatcher.CurrentDispatcher;
}
/// <summary>
/// Executes this action in the right thread
/// </summary>
///<param name="action">The action which should be executed</param>
private void DoDispatchedAction(Action action)
{
if (_currentDispatcher.CheckAccess())
action.Invoke();
else
_currentDispatcher.Invoke(DispatcherPriority.DataBind, action);
}
/// <summary>
/// Handles the event when a collection has changed.
/// </summary>
/// <param name="e"></param>
protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
{
DoDispatchedAction(() => base.OnCollectionChanged(e));
}
Collection.Add(object)
デバッグ中に、が呼び出されているのを見てきました。関数を開始しDoDispatchedAction
、デバッガーが最後にヒットするのは_currentDispatcher.Invoke(DispatcherPriority.DataBind, action);
. この後、アプリケーションは続行されますが、その後のコードCollection.Add(object)
は実行されなくなります。最初に項目を ObservableList に追加したコードも続行されません。そういうわけで、スレッドが死ぬか、そのようなものだと思います。
デバッガーで動作を確認したところ、次のメッセージが表示されていました。
ApartmentState = '_currentDispatcher.Thread.ApartmentState' がタイプ 'System.Threading.ThreadStateException' の例外をスローしました
どうすればこの問題を解決できますか? 私は正しい方向に考えていますか?