在我的視窗中,我需要為FileWatcher機器上的串列設定 , 串列。為此,我設定了一個新課程MachineWatcher:
public class MachineWatcher : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propName)
{
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
}
private bool NotifyPropertyChanged<T>(ref T variable, T valeur, [CallerMemberName] string nomPropriete = null)
{
if (object.Equals(variable, valeur)) return false;
variable = valeur;
NotifyPropertyChanged(nomPropriete);
return true;
}
private Machine machine { get; set; }
public Machine Machine { get { return this.machine; } set { this.machine = value; } }
private string typeWatcher { get; set; } = "";
public string TypeWatcher { get { return this.typeWatcher; } set { this.typeWatcher = value; } }
FileSystemWatcher watcher { get; set; }
public FileSystemWatcher Watcher { get { return this.watcher; } set { this.watcher = value; } }
private string lastFileName { get; set; } = "";
private DateTime lastEvent { get; set; } = DateTime.MinValue;
private ObservableCollection<string> listErrors { get; set; } = new ObservableCollection<string>();
public ObservableCollection<string> ListErrors { get { return this.listErrors; } set { this.listErrors = value; NotifyPropertyChanged("ListErrors"); } }
public MachineWatcher()
{
}
public MachineWatcher(string type,string directoryStock,string fileFilter)
{
this.typeWatcher = type;
this.watcher = new FileSystemWatcher
{
Path = Path.GetDirectoryName(directoryStock),
Filter = fileFilter
};
if (this.typeWatcher=="stock")
{
this.watcher.Created = new FileSystemEventHandler(OnStockFileCreated);
}
else if(this.typeWatcher=="machine")
{
//this.watcher.NotifyFilter = NotifyFilters.Size | NotifyFilters.LastWrite | NotifyFilters.LastAccess | NotifyFilters.CreationTime;
this.watcher.Changed = OnFeedBackNesterCreated;
this.watcher.Created = OnFeedBackNesterCreated;
this.watcher.Renamed = OnFeedBackNesterCreated;
this.watcher.Deleted = OnFeedBackNesterCreated;
}
this.watcher.EnableRaisingEvents = true;
}
private void OnFeedBackNesterCreated(object source, FileSystemEventArgs e)
{
try
{
//try to read file
}
catch
{
string errorText = "Error reading file " e.FullPath;
this.ListErrors.Add(errorText);
}
}
}
然后在我的 mainWindow 中我定義了一個List<MachineWatcher>
然后我這樣創建:
MachineWatcher machineWatcher = new MachineWatcher("stock", directoryStock, "*.csv");
this.listMachineWatchers.Add(machineWatcher);
我想要的是,當我MachineWatcher遇到錯誤時,進入catch,更新 a Observable<string> ListErrors,所有機器的所有錯誤都寫在哪里。
有沒有辦法從物件 MachineWatcher 呼叫 MainWindows 中的函式?
uj5u.com熱心網友回復:
有沒有辦法從物件 MachineWatcher 呼叫 MainWindows 中的函式?
是的,假設您有對MainWindowin的參考MachineWatcher。
例如,您可以在實體化它時注入MachineWatcher帶有參考的類MainWindow:
private readonly MainWindow mainWindow;
public MachineWatcher(string type,string directoryStock,string fileFilter, MainWindow mainWindow)
{
this.typeWatcher = type;
this.watcher ...
this.mainWindow = mainWindow;
}
主視窗:
MachineWatcher machineWatcher = new MachineWatcher("stock", directoryStock, "*.csv", this);
mainWindow然后你可以直接從MachineWatcher類中呼叫任何成員。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/532977.html
標籤:C#wpf
