У меня есть следующий код:
void ReferenceManager_DoWork(object sender, DoWorkEventArgs e)
{
try
{
// Get the raw data
byte[] data = this.GetData(IvdSession.Instance.Company.Description, IvdSession.Instance.Company.Password);
// Deserialize the list
List<T> deseriaizedList = null;
using (MemoryStream ms = new MemoryStream(data))
{
deseriaizedList = Serializer.Deserialize<List<T>>(ms);
}
// Convert the list to the Reference Interface
List<IReference> referenceList = new List<IReference>();
foreach (T entity in deseriaizedList)
{
IReference reference = (IReference)entity;
referenceList.Add(reference);
}
e.Result = referenceList;
}
catch (WebException)
{
e.Result = null;
}
}
Код в основном вызывает делегата для метода WebService. К сожалению, основной причиной, по которой я использовал фоновый рабочий, было прекращение зависания пользовательского интерфейса при загрузке данных. У меня есть форма, которая говорит: «Пожалуйста, подождите, нажмите здесь, чтобы отменить.
При нажатии кнопки отмены я вызываю функцию CancelAsync в фоновом режиме. Теперь, когда я не зацикливаюсь, я не вижу хороший способ проверки отмены. Единственный вариант, который я вижу, это иметь ...
byte[] m_CurrentData;
... вне метода и запуска нового потока в начале DoWork (..), который вызывает веб-сервис для заполнения m_CurrentData. Затем мне нужно будет выполнить проверку цикла, если она отменена, или проверку, если m_CurrentData больше не равен нулю.
Есть ли лучший способ добиться отмены?