別のスレッドでウィンドウの背景を変更したいだけです。 2つのプログラムがあり、1つは作業の権利であり、もう1つはInvalidOperationExceptionをスローします。他のスレッドで作成されたオブジェクトを使用する
右コード:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Thread t = new Thread(new ParameterizedThreadStart(threadTest));
t.Start(@"C:\Users\Public\Pictures\Sample Pictures\Chrysanthemum.jpg");
}
void threadTest(object obj)
{
string path = obj as string;
this.Dispatcher.Invoke(new Func<object>(() => this.Background = new
}
}
エラーコード:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Thread t = new Thread(new ParameterizedThreadStart(threadTest));
t.Start(@"C:\Users\Public\Pictures\Sample Pictures\Chrysanthemum.jpg");
}
void threadTest(object obj)
{
string path = obj as string;
//this.Dispatcher.Invoke(new Func<object>(() => this.Background = new ImageBrush(new BitmapImage(new Uri(path)))));
ImageBrush background = new ImageBrush(new BitmapImage(new Uri(path)));
this.Dispatcher.Invoke(new Func<object>(() => this.Background = background));
}
}
これらのコードの間で異なるが、エラーコードは、子スレッドでImageBrushオブジェクトを作成し、ということです。 だから私の質問は:wpfプログラムでは、スレッドは自分のスレッドによって作成されたオブジェクトを使用することができますか?返信いただきありがとうございます。
UIスレッドが単独で作成したオブジェクトしか使用できない場合は、ほかのスレッドがオブジェクトをUIスレッドに渡すようにする方法はありますか? – adream307
@ adream307確かに、私の編集を参照してください:) –