J'ai une application Windows Forms sur laquelle je travaille, mais j'ai des problèmes lorsque je lance l'application. L'application doit charger les informations enregistrées à partir d'un fichier de configuration, puis vérifier les nouveaux éléments. Lorsque je lance l'application, elle commence à rechercher de nouveaux éléments avant de charger les éléments enregistrés. Pour cette raison, l'utilisateur est alerté des nouveaux éléments qui ne sont pas vraiment nouveaux, ils n'ont tout simplement pas encore été chargés à partir du fichier.Problème de contrôle du flux d'une application
Le formulaire:
public class MainForm : Form
{
A a;
public MainForm()
{
InitializeComponent();
a = new A();
a.ItemsFound += new A.NewItemsFoundEventHandler(a_FoundItems);
a.ItemsLoaded += new A.ItemsLoadedEventHandler(a_ItemsLoaded);
a.LoadItems();
}
public void a_FoundItems(object sender, EventArgs e)
{
//Alert user of new items.
}
public void a_ItemsLoaded(object sender, EventArgs e)
{
//Update GUI with items loaded from file.
this.UpdateTheGUI_ThisIsNotARealMethodInMyProgram();
//Then look for new items.
a.CheckForUpdates();
}
}
L'autre objet:
public class A
{
public A(){}
public void LoadItems()
{
//Load Items from save file...
OnItemsLoaded(this);
}
public void CheckForUpdates()
{
//Check for new items...
//If new items are found, raise ItemsFound event
OnNewItemsFound(this,new EventArgs());
}
public delegate void NewItemsFoundEventHandler(object sender, EventArgs e);
public event NewItemsFoundEventHandler ItemsFound;
protected void OnNewItemsFound(object sender, EventArgs e)
{
if(ItemsFound != null)
{
ItemsFound(sender,e);
}
}
public delegate void ItemsLoadedEventHandler(object sender, EventArgs e);
public event ItemsLoadedEventHandler ItemsLoaded;
protected void OnItemsLoaded(object sender)
{
if(ItemsLoaded != null)
{
ItemsLoaded(sender,new System.EventArgs());
}
}
}
Dois-je avoir objet un appel, il est fonctionne sur un nouveau thread, et verrouiller si CheckForUpdates ne peut pas être appelé si LoadItems est en cours d'exécution, ou y a-t-il une manière plus simple de faire ceci que je manque?
EDIT:
Je trouve le problème. Je nettoyais la liste des objets (donc ça ne se développerait pas pour toujours), mais je ne faisais que le remplir avec les objets nouvellement trouvés. Donc, chaque fois que j'ai lancé l'application, seuls les éléments les plus récents dans la liste, et tous les anciens éléments ont été vidés.
STUPIDE !!!
Merci pour l'aide si, et désolé pour la question de merde.
Désactiver l'entrée d'application pendant que le traitement de chargement est en cours? – kenny