2
編輯:我更新了我的代碼。這會實現我的目標嗎?如何將操作傳遞給目標較弱的任務工廠
我有一個方法的異步調用方法的工作集,但我有一個具體的問題,我通過lambda傳入的引用。具體來說,我有一個(子)窗口,開始一個操作並註冊一個回調。正如你所預料的那樣,即使我關閉了這個窗口,它仍然會被調用。
我想要做的是傳遞一種「弱引用」或構造一個弱引用。
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 2012-02-13 15:24:24
@svick hm好吧,我只是建立它,所以現在沒有多少發生,但它返回的數據,這可能會設置datacontext或我猜。 – UrbanEsc 2012-02-13 15:28:16
那麼,爲什麼這是一個問題呢? – svick 2012-02-13 15:31:17