Редактировать: я обновил свой код. Будет ли это достигать того, к чему я стремлюсь?Как передать действие на фабрику задач со слабой ссылкой на цель
У меня есть рабочий набор методов для асинхронного вызова методов, но у меня есть конкретная проблема с ссылками, которые я передаю через лямбда. В частности, у меня есть (дочернее) окно, которое запускает операцию и регистрирует обратный вызов. Как и следовало ожидать, даже когда я закрываю это окно, он все равно вызывается.
Что я хочу сделать, это передать своеобразную «слабую ссылку» или создать слабую ссылку из входящего действия.
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