考虑到这段代码...
public class CalibrationViewModel : ViewModelBase
{
private FileSystemWatcher fsw;
public CalibrationViewModel(Calibration calibration)
{
fsw = new FileSystemWatcher
{
Path = @"C:\Users\user\Desktop\Path\ToFile\Test_1234.txt",
Filter = @"Test_1234.txt",
NotifyFilter = NotifyFilters.LastWrite
};
fsw.Changed += (o, e) =>
{
var lastLine = File.ReadAllLines(e.FullPath).Last();
Dispatcher.BeginInvoke((Action<string>) WriteLineToSamplesCollection, lastLine); //line that cites error
};
}
private void WriteLineToSamplesCollection(string line)
{
// do some work
}
}
为什么我会收到错误信息:“在静态上下文中无法访问非静态方法BeginInvoke”?
我查看了SE上的几个示例,大多数引用了在创建对象之前尝试使用字段,就像在静态方式中尝试使用非静态字段一样,但我不明白我的代码中是什么引发了相同的错误。
最后,我该如何修复这个特定的问题/代码?
更新:更正标题以反映“方法”而不是“属性”的问题。我还添加了该类实现了ViewModelBase。
Application
类的实例会带来很多问题(例如此处和与资源相关的问题)。 - Federico BerasateguiWriteLineToSamplesCollection(string line)
负责更新视图绑定的ObservableCollection<T>
。那么我需要使用Application.Current.Dispatcher.BeginInvoke()
吗? - Isaiah NelsonApplication.Current
方法。 - Federico Berasategui