我正在制作一个程序,但我面临的一个问题是让我担心。我是新手,我正在为竞争建立这个程序。问题所在的代码如下:
class Blabla : Usercontrol
{
public List<string> mainList;
public Blabla()
{
mainList = new List<string>();
something.DownloadStringCompleted += new DownloadStringCompletedEventHandler(xx_DownloadStringCompleted);
}
void xx_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
List<string> abc = SomeMethod(e.Result);
mainList = abc;
}
}
我试试吧。即使“abc”变量具有我想要的值,mainList仍然是空的。我不知道为什么以及如何使它工作。这就是为什么我需要一些手。谢谢。
答案 0 :(得分:0)
变量abc
具有您想要的值,直到事件处理程序被删除,因为它被直接使用e.Result
而被删除。
熟悉.Clone()
方法和IClonable
界面,并尝试创建有问题的列表的COPY,而不是参考。
答案 1 :(得分:0)
如果abc是一个列表,mainList将被设置为相同的列表。您不必克隆列表,它应该保持活动状态,因为它有对它的引用,因此它不会被垃圾收集。
当你说mainList为空时,你是否在xx_DownloadStringCompleted方法中设置后立即在调试器中查看它?或者你在程序的其他地方看它?
我猜这是一个线程问题。您的事件处理程序是否从另一个线程调用?如果是这样,您需要添加一些同步逻辑,以保证mainList可用于您的其他线程。