我有下面的代碼中提取數據:C#.NET - 如何取消一個BackgroundWorker從一個WebService
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方法。不幸的是,我使用後臺工作的主要原因是在加載數據時停止UI凍結。我有一個表單彈出,請稍候,點擊此處取消。
在取消點擊我後臺工作者調用CancelAsync。現在,因爲我沒有循環,所以我看不到漂亮的檢查取消的方法。我能看到的唯一的選擇是有...
byte[] m_CurrentData;
...調用WebService的填充m_CurrentData方法外和的DoWork(..)開始啓動一個新的線程。然後我需要執行循環檢查,如果取消或檢查m_CurrentData是否不再爲空。
有沒有更好的取消方法?
嗨,DoWork有e.Cancel提供取消通知。我的方法不會循環,因此無法檢查e.Cancel是否已更改爲true。 – GenericTypeTea 2009-06-09 19:36:43
啊 - 我讀過,但顯然沒有完全接受,你的問題的一部分。我會看看我能否更新答案。 – ChrisF 2009-06-09 19:40:09