Tworzę plik SolidColorBrush
w przypadku niektórych wątków innych niż GUI i chcę przekazać go do wątku GUI, aby go wyświetlić, ale otrzymuję InvalidOperationException
: The calling thread cannot access this object because a different thread owns it.
(nawet jeśli spróbuję uzyskać Freeze();
). Jak przekazać obiekt utworzony w wątku X do wątku Y?Jak przekazać obiekt WPF, który został utworzony w wątku X, do wątku Y?
Wiem, że mogę utworzyć ten obiekt SolidColorBrush
w wątku GUI z Dispatcher
, ale to wszystko komplikuje ... Chcę go utworzyć w wątku roboczym.
Dodatkowe szczegóły:
zainicjować jakąś statyczną delegata w jakimś statycznym klasy, aby umożliwić wysyłanie wiadomości z warstwy biznesowej do GUI:
public static class Gui{
private static PrintMethodDelegate _printMethod;
public static void InitializeGuiInterface(PrintMethodDelegate printMethod){
_printMethod = printMethod;
}
public static void Print(GuiMessage data) { _printMethod(data); }
}
inicjalizacji (w wątku GUI):
Gui.InitializeGuiInterface(_messagesToUserHandler.PrintMessage);
Następnie w innym wątku (bez GUI) używam go:
Gui.Print(new GuiMessage(testDescription) { Foreground = new SolidColorBrush(someColor) });
podczas GuiMessage
jest:
public class GuiMessage {
public string Msg { get; set; }
private SolidColorBrush _foregroundBrush;
public SolidColorBrush Foreground
{
get { return _foregroundBrush; }
set { _foregroundBrush = value; }
}
}
Czy próbowałeś napisać komunikat o błędzie do google? Zwraca wszystkie odpowiedzi, które możemy tutaj podać. – I4V
Myślę, że krótka odpowiedź brzmi, że nie możesz. Wszystkie kontrolki/artefakty związane z GUI powinny być tworzone i obsługiwane w wątku UI. –
@ I4V: Tak, próbowałem. Dziękuje za twoją sugestię. – Tar