編集:コードを更新しました。これは私が目指しているものを達成するだろうか?ターゲットへの弱参照のあるタスクファクトリにアクションを渡す方法
私はメソッドの非同期呼び出しのためのメソッドの作業セットがありますが、私はラムダ経由で渡す参照に特定の問題があります。特に私は操作を開始し、コールバックを登録する(子)ウィンドウがあります。ご想像のとおり、このウィンドウを閉じても、まだ呼び出されます。
私がしたいことは、「弱い参照」の一種を渡すか、入ってくるアクションから弱い参照を構築することです。
Thhisは、私は私のアクションを構築する方法(サンプルコード)である:
static Action CreateNewAction(Action call, Action<SomeArg> callback,
Dispatcher dispatcher)
{
return delegate {
try
{
call();
var target = callback.Target
if(target != null)
dispatcher.Invoke(callback, new SomeArg());
}
catch (Exception ex)
{
// handle the ex in some way..
}
};
}
そして、これは、タスクの工場がそれを呼び出す方法です:
var t = Task.Factory.StartNew(CreateNewAction(call, callback, dispatcher))
そして、これは私が(それを呼び出す方法ですコールはアクションとコールバックの両方を上に見られるようにタスクファクトリに通すだけです)。
WeakReference wr = new WeakReference(myTarget);
StartMyTaskAsync(someAction, ((MyTargetClass)wr.Target).SomeCompletedFunc);
閉じたウィンドウでそのアクションを呼び出すと、どういうことが起こりますか? – svick
@svick hm私はちょうどそれほど現実的ではないが、それを構築しているが、それはデータを返し、それはおそらくdatacontextまたは私が推測する何かに設定することができる。 – UrbanEsc
それで、どうしてそれが問題になるのですか? – svick