When I wrapped the code that is setting the property in a Dispatcher.BeginInvoke lambda it set the property no problem
When working with threading, you have to be careful not to attempt any UI-bound operations from a background thread -- that will lead to a "cross thread access exception". For example, this will throw an exception, because the property "ipAddressOrDomain" is UI-bound:
Task.Factory.StartNew(() =>
ipAddressOrDomain = "something" // throws exception
);
The way around this, as you noted, is to dispatch any such operations back to the UI thread:
Task.Factory.StartNew(() => {
Deployment.Current.Dispatcher.BeginInvoke(() =>
ipAddressOrDomain = "something" // ok
);
});
Side note: if you check the Output window in Visual Studio, you should see the exception appear there. The Output window is a good place to start whenever you notice a binding fail silently.