У меня есть приложение Windows Forms, над которым я работаю, но у меня возникают проблемы при запуске приложения. Приложение должно загрузить сохраненную информацию из файла конфигурации, а затем проверить наличие новых элементов. Когда я запускаю приложение, оно начинает искать новые элементы до того, как завершит загрузку сохраненных элементов. Из-за этого пользователь получает уведомление о новых элементах, которые на самом деле не являются новыми, они просто еще не были загружены из файла.
Форма:
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();
}
}
Другой объект:
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());
}
}
}
Должен ли я вызывать объект A, вызывать его функции в новом потоке и блокировать, чтобы CheckForUpdates нельзя было вызывать, если запущен LoadItems, или есть более простой способ сделать это, которого мне не хватает?
EDIT:
Я нашел проблему. Я очищал Список предметов (чтобы он не рос вечно), но я только заполнял его только что найденными предметами. Поэтому каждый раз, когда я запускал приложение, только самые новые элементы в списке и все старые элементы сбрасывались.
STUPID !!!
Спасибо за помощь, и извините за дерьмовый вопрос.