My basic issue is this, I have events firing on pages I’ve left based on network activity that are causing problems when I thought the old forms were being destroyed.
More detailed information: I am writing a windows phone app that communicates with a network player. I have a static instance of my communication class in my App class so all the forms can share the connection, and all my forms subscribe to it and process results within that form. From a main menu you can choose one type of source and it opens a file browsing form that refreshes a listbox as you navigate, cancels the back button and refreshes the new contents to simulate file navigation until you are the root folder. The app doesn’t know if you’re clicking on a file or folder, it gets a network message when media starts playing and watch for that and then navigate to a “play” form. I had been using all .Navigate’s for this until now and it worked great until I added another branch off the main menu for a new source. Although the new source is completely different, the device sends a lot of the same generic commands which just mean something else in the current context. After visiting the my file browser form and going to my new source, a play command from the network, which means something else now, would cause my to jump into my old “play” form from the previous source as if I was still on the file browser form, which isn’t intended.
So I’ve tried many things and have it kind of working now but it’s message and I lose some features. Currently I changed from using all .navigates, also in the back button override, to trying to use the stack and navigate.goback’s. I pass variables when needed using globals in App and unhook my net listeners from the form, goback, and then connect them in the new form’s listeners in it’ navigatedto. I think there is timing issue though as in some cases I needed to send a command to the media box as it’s changing and it ended up triggering the wrong event handler again. I think the easiest solution, if possible, and they way I though it would work is if each time I navigated from the form it old one, it’s handlers, etc were all destroyed and I didn’t have to use the stack at all, handling all the back buttons myself.
I know that’s a long description and thanks if you made it this far, hopefully it made some kind of sense. Does anyone have any suggestions on what I can do?
As a side note I’m a long time self-taught VB programmer who has been stuck in .net 2.0/winforms and I’ve just now made the move to C#, OOPs, and XAML to write my first Windows Phone app so it’s likely I’m doing something stupid or overlooking something obvious…
It is likely because something has retained reference to the form. The most common cause is event handlers.
So, if your static class exposes an event, and you subscribe to that event in a form, you must unsubscribe from the event when your form closes / navigates, otherwise the form will remain in memory….
If that isn’t the case, look for something else that is acquiring a reference to your form and not releasing it.