¿No se puede acceder al método no estático en contexto estático?

Dado este código …

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) WriteLineToSamplesCollection, lastLine); //line that cites error }; } private void WriteLineToSamplesCollection(string line) { // do some work } } 

¿Por qué me aparece el error “No se puede acceder al método BeginStoke no estático en un contexto estático”?

He visto otros ejemplos en SE y la mayoría cito tratando de usar un campo antes de crear el objeto como si estuvieran tratando de usar un campo no estático de forma estática, pero no entiendo de qué se trata. Código que está invocando el mismo error.

Por último, ¿qué puedo hacer para solucionar este problema / código específico?

Actualización: Se corrigió el título para reflejar el problema con un ‘método’ y no con una ‘propiedad’. También agregué que la clase implementa ViewModelBase.

Si esto es WPF, System.Windows.Threading.Dispatcher no tiene un BeginInvoke() estático BeginInvoke() .

Si desea llamar a eso de forma estática (es decir, sin tener una referencia a la instancia de Dispatcher), puede usar la propiedad Dispatcher.CurrentDispatcher estática:

 Dispatcher.CurrentDispatcher.BeginInvoke(...etc); 

Tenga en cuenta, sin embargo, que hacer esto desde un subproceso en segundo plano NO devolverá una referencia al Dispatcher del “Subproceso de interfaz de usuario”, sino que creará una instancia de NUEVO Dispatcher asociada con dicho Subproceso de fondo.

Una forma más segura de acceder al Dispatcher de “UI Thread” es a través del uso de la propiedad estática System.Windows.Application.Current :

 Application.Current.Dispatcher.BeginInvoke(...etc); 

Cambia esto:

 Dispatcher.BeginInvoke 

a esto:

 Dispatcher.CurrentDispatcher.BeginInvoke 

el problema es que BeginInvoke es un método de instancia y necesita una instancia para acceder a él. Sin embargo, su syntax actual está intentando acceder a BeginInvoke de forma static fuera de la clase Dispatcher y eso es lo que está causando este error:

No se puede acceder al método no estático BeginInvoke en contexto estático

Es porque Dispatcher es una clase, no una propiedad. ¿No deberías estar haciendo de tu clase CalibrationViewModel una subclase de alguna otra clase que tenga una propiedad de Dispatcher ?