我有以下代码:
在方法之外启动一个新线程,在DoWork(..)的开始调用webservice来填充m_CurrentData。然后需要执行循环检查是否已取消或检查m_CurrentData是否不再为空。
有更好的实现取消的方法吗?
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;
在方法之外启动一个新线程,在DoWork(..)的开始调用webservice来填充m_CurrentData。然后需要执行循环检查是否已取消或检查m_CurrentData是否不再为空。
有更好的实现取消的方法吗?