Dzieje się tak, ponieważ w linijce 16 odwołujesz się do Dispatchera, który należy do osobnego wątku (tego w którym się dzieje operacja), a wszystkie modyfikacje UI muszą odbywać się w wątku, do któryego należy dany element UI (w Twoim wypadku obraz "imageObraz" należy do innego wątku niż operacje wykonywane po kliknięciu). Spróbuj z poniższym kodem:
private void buttonGetScreen_Click(object sender, RoutedEventArgs e)
{
new Thread(
delegate()
{
while (true)
{
// pobieranie obrazu
using (var stream = System.IO.File.OpenRead(sciezkaDoObrazu))
{
var bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.StreamSource = stream;
bitmap.EndInit();
bitmap.Freeze();
imageObraz.Dispatcher.Invoke(new Action(() => { imageObraz.Source = bitmap; })); // wywala mi tu z niewiadomych przyczyn błąd że nie ma dostępu do imageObraz image obraz to obraz typu Image w oknie dodany w xaml
}
}
}
).Start();
}
Zmieniłem tylko linijkę 16 na:
imageObraz.Dispatcher.Invoke(new Action(() => { imageObraz.Source = bitmap; }));