我对WeakReference
有疑问。
我将WPF App作为TCP客户端并使用WeakReference
将窗口实例传递给“客户端逻辑”(如果窗口在请求运行时关闭,则避免内存泄漏)。
我有一个窗口和2个方法实现(1)和(2):
//Window
public partial class MainWindow : Window, IAnswerListener
{
//code here
private void On_Click(object sender, RoutedEventArgs e)
{
//(2) // Request(new WeakReference<IAnswerListener>(this))
// or
//(1) // Request(this)
}
}
//class with logic
//Request method (1)
public void Request(IAnswerListener listener)
{
var weakRef = new WeakReference<IAnswerListener>(listener);
NextCall(weakRef);
}
//Request method (2)
public void Request(WeakReference<IAnswerListener> listener)
{
NextCall(listener);
}
哪种类型的请求更好用?如果窗口关闭或GC没有参考,是否会在类型(1)的情况下留下参考?