Этот вопрос является продолжением темы Инициализация потока в конструкторе класса. На англоязычном StackOverflow я получил такое решение:
private ObservableCollection<PersonEntitiy> allStaff;
private Thread dataFileTransactionsThread;
#region Constructor
public staffRepository() {
allStaff = getStaffDataFromTextFile();
dataFileTransactionsThread = new Thread(UpdateDataFileThread);
}
#endregion
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);
Если быстро удалить два экземпляра подряд, то возникнет исключение System.Threading.ThreadStateException: Поток ещё выполняется или пока завершается. Перезапуск невозможен.
.
Суть исключения в принципе ясна, но решения ниже будет недостаточно, ведь тогда просто не произойдёт сохранения файла при удалении второго экземпляра:
if (!dataFileTransactionsThread.IsAlive) {
dataFileTransactionsThread.Start(allStaff);
}
Наверное, хорошим решением будет перезапустить данный поток, когда он будет завершен, и тогда уже выполнить повторное сохранение. Правда, надо будет предусмотреть случай быстрых трёх и более удалений, но тут, опять же на словах, подход простой: нам нужен только самый свежий экземляр коллекции allStaff
, потому при появлении очереди на вызова UpdateDataFile
нужно как-то оставить в очереди только последний вызов с самым свежим экземпляром allStaff
. Какие есть средства в C#, чтобы реализовать выше задуманное?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
В вопросе Получение данных во ViewModel из делегированного объекта по поводу приведённого ниже кода View с привязками и паттерна MVVM в целом я понял...
Имеется сервер класса TcpListenerОн принимает входящие подключения методом BeginAcceptTcpClient (AsyncCallback, Object)
Нашёл на просторах StackOverflow пример как читать данные из excelНо вылетают ошибки