私が作業している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());
}
}
}
私はLoadItemsが実行されている場合は、checkForUpdatesを呼び出すことはできませんので、それは新しいスレッド上の機能、およびロックの呼びかけオブジェクトありましたら、または私が行方不明になっているこれを行う簡単な方法はありますか?
EDIT:
私は問題を発見しました。私はアイテムのリストをクリアしていたので(永遠には伸びないだろうが)、私は新しく見つかったアイテムだけを埋めていた。だから毎回、アプリケーションを実行するたびに、最新のアイテムだけが一覧に表示され、古いアイテムはすべてフラッシュされました。
STUPID !!!
ご協力ありがとうございます。ごめんなさい質問を申し訳ありません。
ローディング処理中にアプリケーション入力を無効にしますか? – kenny