SolidColorBrush
非 GUI スレッドでを作成し、それを GUI スレッドに渡して表示したいのですが、取得しようとしてもInvalidOperationException
:になります。スレッド X で作成されたオブジェクトをスレッド Y に渡すにはどうすればよいですか?The calling thread cannot access this object because a different thread owns it.
Freeze();
このSolidColorBrush
オブジェクトを GUI スレッドDispatcher
で
追加の詳細:
ビジネス層から 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); }
}
初期化 (GUI スレッドで):
Gui.InitializeGuiInterface(_messagesToUserHandler.PrintMessage);
次に、別の (GUI 以外の) スレッドで、それを使用します。
Gui.Print(new GuiMessage(testDescription) { Foreground = new SolidColorBrush(someColor) });
一方GuiMessage
は:
public class GuiMessage {
public string Msg { get; set; }
private SolidColorBrush _foregroundBrush;
public SolidColorBrush Foreground
{
get { return _foregroundBrush; }
set { _foregroundBrush = value; }
}
}