Dispatcher.Invoke --> Collection.Add (XmlNode.CloneNode(true))



  • Hallo ...

    Aus einem Workerthread versuche ich diesen Code

    searchData.matchIDCollection.Add(element.CloneNode(true));
    

    ...mit nem Dispatcher.Invoke so zu verpacken das das ganze Threadsicher ist. Kann mir da jemand fix bei helfen =?



  • Momentan versuche ich das ganze so ...

    Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background,
                         (SendOrPostCallback)delegate { searchData.matchIDCollection.Add(element.CloneNode(true)); }, element.CloneNode(true));
    

    Der aufrufende Thread kann nicht auf dieses Objekt zugreifen, da sich das Objekt im Besitz eines anderen Threads befindet.


  • Administrator

    Lies dir mal die Dokumentation zu Dispachter.CurrentDispatcher aufmerksam durch. FĂ€llt dir nichts auf? 😃

    GrĂŒssli



  • Ich erstelle einen neuen, da keiner existiert ?


  • Administrator

    shaun1981 schrieb:

    Ich erstelle einen neuen, da keiner existiert ?

    *nickt, nickt, nickt*
    Ein Dispatcher ist immer einem Thread zugeordnet. Du hast Thread TA mit dem fĂŒr diesen Thread verantwortlichen Dispatcher DA und du hast Thread TB ohne Dispatcher. Wenn du etwas aus TB auf TA ausfĂŒhren möchstest, musst du dies ĂŒber DA tun.
    Du bist also in TB, rufst Dispatcher.CurrentDispatcher auf, wodurch ein Dispatcher DB fĂŒr TB erstellt wird und machst darĂŒber den Invoke , wodurch die Funktion in TB ausgefĂŒhrt wird. TA oder DA kommen da nie zum Einsatz 😉

    GrĂŒssli



  • Sehr verstĂ€ndlich. Super. Thanx


Log in to reply