在這個問題Why I need to overload the method when use it as ThreadStart() parameter?,我得到了保存在單獨的線程問題的文件以下解決方案(必須刪除時保存文件或添加PersonEntity
的新實例):重新啓動線程時,它會停止
private ObservableCollection<PersonEntitiy> allStaff;
private Thread dataFileTransactionsThread;
public staffRepository() {
allStaff = getStaffDataFromTextFile();
dataFileTransactionsThread = new Thread(UpdateDataFileThread);
}
public void UpdateDataFile(ObservableCollection<PersonEntitiy> allStaff)
{
dataFileTransactionsThread.Start(allStaff);
// If you want to wait until the save finishes, uncomment the following line
// dataFileTransactionsThread.Join();
}
private void UpdateDataFileThread(object data) {
var allStaff = (ObservableCollection<PersonEntitiy>)data;
System.Diagnostics.Debug.WriteLine("dataFileTransactions Thread Status:"+ dataFileTransactionsThread.ThreadState);
string containsWillBeSaved = "";
// ...
File.WriteAllText(fullPathToDataFile, containsWillBeSaved);
System.Diagnostics.Debug.WriteLine("Data Save Successfull");
System.Diagnostics.Debug.WriteLine("dataFileTransactions Thread Status:" + dataFileTransactionsThread.ThreadState);
}
現在,如果順序刪除PersonEntity
的兩個實例,則會發生System.Threading.ThreadStateException: Thread is still executing or don't finished yet. Restart is impossible.
。
我明白這個例外的意思是作爲一個整體,但是,下面的解決方案還不夠:下一次,文件將不會被保存。
if (!dataFileTransactionsThread.IsAlive) {
dataFileTransactionsThread.Start(allStaff);
}
也許最好在完成後重新啓動線程,然後再次保存該文件。但是,還需要提供代碼,以便在將按順序刪除三個或更多實例的情況下。就概念層面而言,很簡單:我們只需要最新的allStaff
集合,因此以前未保存的allStaff
集合或不再需要。
如何才能在C#
上實現上述概念?
「將被連續刪除三個或更多實例」是什麼意思? – Enigmativity
一旦'UpdateDataFileThread'完成,你的線程就會結束。你必須每次開始一個新的。 – Enigmativity
@Enigmativity,「將被刪除」 - 表示用戶將通過「刪除」按鈕刪除三個或更多列表項(這是來自集合的PersonEntity實例); 「順序」 - 不是在同一時間。對不起我的英語不好。 –