开发者

Assigning a value to a global variable from inside of event handler?

开发者 https://www.devze.com 2023-02-14 05:53 出处:网络
I\'m working on a program but an issue i was faced to keep me worried.I\'m kind of novice and i\'m building this program for a competition.The code where the problem lies is like following :

I'm working on a program but an issue i was faced to keep me worried.I'm kind of novice and i'm building this program for a competition.The code where the problem lies is like following :

c开发者_如何转开发lass 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;
    }
}

I try it.Even though "abc" variable has the value i want , mainList remains empty.I don't know why and how to make it work.That's why i need some hand.Thank you.


Variable abc has the value you want UNTIL you get out of your event handler, probably, when it gets deleted because it uses e.Result directly.

Familiarize yourself with .Clone() method and IClonable interface, and try creating a COPY of the list that is in question, not the reference.


If abc is a list, mainList will be set to the same list. You don't have to clone the list, it should stay active because there is a reference to it, and therefore it doesn't get garbage collected.

When you said that mainList was empty, did you look at it in the debugger immediately after setting it in the xx_DownloadStringCompleted method? Or are you looking at it somewhere else in your program?

I would guess that this is a threading issue. Does your event handler get called from a different thread? If so, you would need to add some synchronization logic in order to guarantee that mainList is available to your other thread.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号