Với mã này ....Không thể truy cập phương pháp không tĩnh trong ngữ cảnh tĩnh?
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
}
}
Tại sao tôi nhận lỗi 'Không thể truy cập phương pháp không tĩnh BeginInvoke trong bối cảnh tĩnh'?
Tôi đã xem xét một số ví dụ khác về SE và hầu hết trích dẫn cố gắng sử dụng trường trước khi đối tượng được tạo như thể họ đang cố gắng sử dụng trường không tĩnh theo cách tĩnh, nhưng tôi không hiểu đó là về mã của tôi đang gọi cùng một lỗi.
Cuối cùng, tôi có thể làm gì để khắc phục vấn đề/mã cụ thể này?
Cập nhật: Tiêu đề cố định phản ánh vấn đề với 'phương pháp' chứ không phải 'thuộc tính'. Tôi cũng nói thêm rằng lớp thực hiện ViewModelBase.
Lưu ý rằng bạn có thể sử dụng WPF mà không có bất kỳ đối tượng 'Application' nào, trong trường hợp đó' Application.Current' là 'null', nghĩa là cách an toàn hơn sẽ không hoạt động. – hvd
@hvd Phải, tuy nhiên điều đó sẽ chỉ xảy ra trong các trường hợp ngoại lệ (chẳng hạn như lưu trữ nội dung WPF trong một ứng dụng winforms). Nếu không thì các ứng dụng WPF thông thường và không có một thể hiện của lớp 'Application' sẽ mang lại rất nhiều vấn đề (như điều này, và các công cụ liên quan đến tài nguyên). –
Chắc chắn, đã đồng ý. Và ngay cả trong trường hợp đó, nếu một số mã cần một đối tượng 'Application', có thể tạo một cách rõ ràng một đối tượng trong điểm vào, nó sẽ hoạt động tốt. – hvd