如果您使用的不是單線程單元線程的線程使用WinForms/WPF對象,您將得到此異常。爲了從您的WCF服務中使用這些對象,您需要創建一個新線程,將該線程上的公寓狀態設置爲STA
,然後啓動該線程。
我簡單的例子接受一個字符串,並檢查其對一個WPF文本框的拼寫檢查功能:
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;
}
您也可以參考這個S.O.崗位: How to make a WCF service STA (single-threaded)
除了在答案的鏈接: http://www.netfxharmonics.com/2009/07/Accessing-WPF-Generated-Images-Via-WCF