C# 2008 SP1C# Фоновая установка e.Result в DoWork и получать значение обратно в WorkCompleted
Я использую фон рабочего
Если одно из условий не удается обращу e.cancel в истинный работник, и назначьте строку e.result. Там все работает.
Однако, когда workCompleted fire, я тестирую e.Result и получаю исключение «e.result исключает тип systeminvalidoperation».
Я предполагаю, что я мог бы использовать глобальную переменную для установки в DoWork и сравнить в выполненной работе. Но это может быть небезопасно.
Может ли кто-нибудь сказать мне, почему я получаю это с e.Result, и как я могу это решить?
Большого спасибо,
private void bgwPrepareCall_DoWork(object sender, DoWorkEventArgs e)
{
// Check to see if the called number is blocked.
// If the nubmer is blocked display error message.
if (this.IsNoGateway(sipUsername, statusDisplay1.PhoneNumber))
{
// this.SetIdleState(DialerErrorMessage.GetErrorDescription(12));
e.Cancel = true;
e.Result = "NoGateway";
return;
}
if (!this.IsInvalidTelephoneNumber(sipUsername, statusDisplay1.PhoneNumber))
{
// this.SetIdleState(DialerErrorMessage.GetErrorDescription(13));
e.Cancel = true;
e.Result = "InvalidNumber";
return;
}
}
private void bgwPrepareCall_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error == null)
{
if (e.Cancelled)
{
// Failed
switch (e.Result.ToString())
{
case "NoGateway":
Console.WriteLine("NoGateway: [ Failed ]");
break;
case "InvalidNumber":
Console.WriteLine("InvalidNumber: [ Failed ]");
break;
default:
Console.WriteLine("Unknown");
break;
}
}
if (!e.Cancelled)
{
// Successfull
Console.WriteLine("NoGateway: [ ok ]");
Console.WriteLine("InvalidNumber: [ ok ]");
}
}
else
{
Console.WriteLine("PrepareCall Failed: [ " + e.Error.Message + " ]");
}
}