c# – 无法访问静态上下文中的非静态方法?
发布时间:2020-12-15 18:32:25 所属栏目:百科 来源:网络整理
导读:鉴于此代码…… public class CalibrationViewModel : ViewModelBase{ private FileSystemWatcher fsw; public CalibrationViewModel(Calibration calibration) { fsw = new FileSystemWatcher { Path = @"C:UsersuserDesktopPathToFileTest_1234.txt"
鉴于此代码……
public class CalibrationViewModel : ViewModelBase { private FileSystemWatcher fsw; public CalibrationViewModel(Calibration calibration) { fsw = new FileSystemWatcher { Path = @"C:UsersuserDesktopPathToFileTest_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. 解决方法
如果这是WPF,则System.Windows.Threading.Dispatcher没有静态BeginInvoke()方法.
如果要静态调用(也就是说,没有对Dispatcher实例本身的引用),可以使用静态Dispatcher.CurrentDispatcher属性: Dispatcher.CurrentDispatcher.BeginInvoke(...etc); 但请注意,从后台线程执行此操作不会返回对“UI线程”的Dispatcher的引用,而是创建与所述后台线程关联的新Dispatcher实例. 访问“UI线程”的Dispatcher的一种更安全的方法是使用System.Windows.Application.Current静态属性: Application.Current.Dispatcher.BeginInvoke(...etc); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |