API 호출에 대한 네트워크 코드가있는 Outlook 용 addin을 작성 중이므로 APIWork를 캡슐화하는 BackgroundWorker 클래스를 확장하는 여러 클래스가 있습니다. 코드는 API 호출에 대해 다음과 같습니다BackgroundWorkerCompleted가 주 스레드에서 실행되지 않는 것 같습니다.
public class ApiLogin : BackgroundWorker
{
private void ThisAddInStartup(object sender, EventArgs e)
{
this.DoWork += BgWorkerDoWork;
this.RunWorkerCompleted += BgWorkerCompleted;
}
private void BgWorkerDoWork(object sender, DoWorkEventArgs e)
{
//Perform network call on the background thread
var logged_in = ApiRequests.login();
e.Result = logged_in;
}
//This should run in the main thread, no?
private void BgWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
var logged_in = (bool)e.Result;
//Do stuff in main thread, hopefully..
//Investigate if this runs in the main thread since it should block Outlook, no?
Thread.Sleep(50000);
}
}
그리고 코드는 아웃룩 추가 기능에 대해 다음과 같습니다
public class ThisAddin
{
private ApiLogin _loginWorker;
private void ThisAddInStartup(object sender, EventArgs e)
{
_loginWorker = new ApiLogin();
_loginWorker.RunWorkerAsync();
}
}
나는 전망 I 50여 초 동안 차단하는 기대 내 추가 기능을 실행하면 배경 작업자 Completed-event 핸들러에서 Thread.Sleep (50000)을 가지지 만, 이는 발생하지 않습니다. 이것은이 코드가 주 스레드에서 실행되지 않는다는 것을 의미합니다. 나는 헛되이 해결책을 찾았는데 이제는 문제가 될지 모르는 사람이 있는지 알고 싶습니다.
매우 흥미 롭습니다. 나는 이것을보아야 할 것입니다! – nelshh
당신은 정말로 옳았습니다! 고마워요! – nelshh