आप अपने दृश्य मॉडल पर एक घटना बढ़ा सकता है (शायद वह जा रहा है इंगित करने के लिए एक नामकरण परंपरा का उपयोग कर एक गैर-यूआई थ्रेड से उठाया जाना चाहिए - उदाहरण के लिए NotifyProgressChangedAsync)। फिर आपका दृश्य जो घटना से जुड़ा हुआ है, प्रेषक से उचित तरीके से निपट सकता है।
या, आप अपने व्यू मॉडल (आपके दृश्य से) में एक सिंक्रनाइज़िंग फ़ंक्शन में एक प्रतिनिधि को पास कर सकते हैं।
public static class Execute
{
private static Action<System.Action> executor = action => action();
/// <summary>
/// Initializes the framework using the current dispatcher.
/// </summary>
public static void InitializeWithDispatcher()
{
#if SILVERLIGHT
var dispatcher = Deployment.Current.Dispatcher;
#else
var dispatcher = Dispatcher.CurrentDispatcher;
#endif
executor = action =>{
if(dispatcher.CheckAccess())
action();
else dispatcher.BeginInvoke(action);
};
}
/// <summary>
/// Executes the action on the UI thread.
/// </summary>
/// <param name="action">The action to execute.</param>
public static void OnUIThread(this System.Action action)
{
executor(action);
}
}
यह उपयोग करने से पहले आप यूआई धागे से Execute.InitializeWithDispatcher()
फोन करना होगा तो आप इस Execute.OnUIThread(()=>SomeMethod())
http://stackoverflow.com/questions/486758/is-wpf-dispatcher-the-solution-of-multi-threading-problems का डुप्लिकेट? –
डुप्लिकेट नहीं है ... वह पूछ रहा है कि व्यूमोडेल द्वारा लॉन्च किए गए पृष्ठभूमि थ्रेड से प्रेषक कैसे प्राप्त करें (जिसे आमतौर पर प्रेषक तक पहुंच नहीं है)। –