シングルスレッド アパートメント スレッドではないスレッドから WinForms/WPF オブジェクトを使用している場合、この例外が発生します。WCF サービスからこれらのオブジェクトを使用するには、新しいスレッドを作成し、そのスレッドのアパートメント状態を に設定してから、スレッドをSTA
開始する必要があります。
私の簡単な例では、文字列を受け取り、それを WPF TextBox の SpellCheck 機能に対してチェックします。
public bool ValidatePassword(string password)
{
bool isValid = false;
if (string.IsNullOrEmpty(password) == false)
{
Thread t = new Thread(() =>
{
System.Windows.Controls.TextBox tbWPFTextBox = new System.Windows.Controls.TextBox();
tbWPFTextBox.SpellCheck.IsEnabled = true;
tbWPFTextBox.Text = password;
tbWPFTextBox.GetNextSpellingErrorCharacterIndex(0, System.Windows.Documents.LogicalDirection.Forward);
int spellingErrorIndex = tbWPFTextBox.GetNextSpellingErrorCharacterIndex(0, System.Windows.Documents.LogicalDirection.Forward);
if (spellingErrorIndex == -1)
{
isValid = true;
}
else
{
isValid = false;
}
});
t.SetApartmentState(ApartmentState.STA);
t.Start();
t.Join();
}
return isValid;
}
この SO 投稿も参照できます:
WCF サービス STA (シングルスレッド) を作成する方法
回答のリンクと同様:
http://www.netfxharmonics.com/2009/07/Accessing-WPF-Generated-Images-Via-WCF