-3
나는 WatiN
를 사용하여 웹 사이트를 로그인하고 있습니다. WatiN
은 실행될 스레드에 STAThread
attribute이 적용되어야합니다. 지금까지는 모든 것이 좋았지 만 이제는 오랜 시간이 걸립니다. WPF
을 사용 중이므로 UI
이 응답해야합니다. 이 같은 그래서 시도 뭔가 : 내 작업을 시작했을 때WatiN을 비동기 적으로 사용하여 웹 사이트에 로그인하려면 어떻게해야합니까?
_downloadTask = new Task(StartDownload, _cancelationToken.Token);
[STAThread]
public override void StartDownload()
{
if(IsLoginNeeded)
{
bool result = Login();
// check the result and do some other work..
}
}
[STAThread]
public bool Login()
{
if (_browser == null)
_browser = new IE(LoginUrl); // exception
}
, 나는 new IE(LoginUrl)
에 ThreadStateException
를 얻을 :
CurrentThread
필요는ApartmentState
세트ApartmentState.STA
에 인터넷 익스플로러를 자동화 할 수있어해야합니다 .
다른이 내 방법에 STAThread
을 적용하는 시도했지만 내가 런타임에 생성되거나 스레드에 STAThread
속성을 적용 할 수 있는지 궁금 해요 succeeded.Now 없습니다 볼 수 있듯이 이 일을하는 방법?
@Servy 내용은 [여기]'Thread' 클래스 주위에 좋은 작업 래퍼가 있습니다 (http://stackoverflow.com/questions/16720496/set-apartmentstate-on-a-task) –
또한 사용할 수 있습니다 (MessageLoopApartment') (http://stackoverflow.com/a/21808747/1768303), 익숙한'Task Run (Action)'과'Task Run (Func )'래퍼를 제공합니다. –
Noseratio