C# 找不到BackgroundWorker

C# 找不到BackgroundWorker,c#,windows,windows-runtime,windows-phone-8.1,backgroundworker,C#,Windows,Windows Runtime,Windows Phone 8.1,Backgroundworker,我正在使用windows phone 8.1中的System.componentmodel引用来获取BackgroundWorker,但每次我放置BackgroundWorker时,它都会提供给我 错误CS0246找不到类型或命名空间名称“BackgroundWorker”(是否缺少using指令或程序集引用?) 我尝试添加引用,但它说已经添加了 当我把 using System.ComponentModel; 它说使用指令是不必要的 这是我的密码 使用系统; 使用系统诊断; 使用System

我正在使用windows phone 8.1中的System.componentmodel引用来获取BackgroundWorker,但每次我放置BackgroundWorker时,它都会提供给我

错误CS0246找不到类型或命名空间名称“BackgroundWorker”(是否缺少using指令或程序集引用?)

我尝试添加引用,但它说已经添加了 当我把

using System.ComponentModel;
它说使用指令是不必要的

这是我的密码

使用系统;
使用系统诊断;
使用System.Threading.Tasks;
使用Windows.Networking;
使用Windows.Networking.Sockets;
使用Windows.Storage.Streams;
使用系统组件模型;
命名空间HealthBand
{
/// 
///类来控制与Arduino的蓝牙连接。
/// 
公共类连接管理器
{
私人后台工作人员dataReadWorker;
/// 
///用于与Arduino通信的套接字。
/// 
专用流插座;
/// 
///DataWriter用于轻松发送命令。
/// 
专用数据编写器数据编写器;
/// 
///DataReader用于轻松接收消息。
/// 
专用数据阅读器;
/// 
///用于保持从套接字读取数据的线程。
/// 
/// 
///事件处理程序使用的委托。
/// 
///消息已收到。
公共委托无效消息ReceivedHandler(字符串消息);
/// 
///从Arduino接收新消息时激发的事件。
/// 
公共事件消息ReceivedHandler消息Received;
/// 
///初始化管理器,应在主页的OnNavigatedTo中调用。
/// 
公共无效初始化()
{
套接字=新的StreamSocket();
dataReadWorker=新的BackgroundWorker();
dataReadWorker.WorkerSupportsScanCellation=true;
dataReadWorker.DoWork+=新的DoWorkEventHandler(接收消息);
}
/// 
///完成连接管理器,应在主页的OnNavigatedFrom中调用。
/// 
公共无效终止()
{
if(套接字!=null)
{
socket.Dispose();
}
if(dataReadWorker!=null)
{
dataReadWorker.CancelAsync();
}
}
/// 
///连接到给定的主机设备。
/// 
///主机设备名。
公共异步void Connect(主机名设备主机名)
{
if(套接字!=null)
{
等待socket.ConnectAsync(deviceHostName,“1”);
dataReader=新的dataReader(socket.InputStream);
dataReadWorker.RunWorkerAsync();
dataWriter=新的dataWriter(socket.OutputStream);
}
}
/// 
///通过蓝牙接收来自Arduino的信息。
/// 
专用异步void ReceiveMessages(对象发送方,DoWorkEventArgs e)
{
尝试
{
while(true)
{
//读取第一个字节(后续消息的长度,255或更小)。
uint SIZEFEELDCOUNT=等待dataReader.LoadAsync(1);
如果(sizeFieldCount!=1)
{
//在我们能够读取全部数据之前,底层套接字已关闭。
回来
}
//阅读信息。
uint messageLength=dataReader.ReadByte();
uint actualMessageLength=等待dataReader.LoadAsync(messageLength);
if(messageLength!=实际消息长度)
{
//在我们能够读取全部数据之前,底层套接字已关闭。
回来
}
//阅读并处理信息。
字符串消息=dataReader.ReadString(实际消息长度);
MessageReceived(message);
}
}
捕获(例外情况除外)
{
Debug.WriteLine(例如消息);
}
}
/// 
///通过蓝牙向Arduino发送命令。
/// 
///已发送命令。
///发送的字节数
公共异步任务SendCommand(字符串命令)
{
uint命令大小=0;
if(dataWriter!=null)
{
uint commandSize=dataWriter.MeasureString(命令);
dataWriter.WriteByte((字节)commandSize);
sentCommandSize=dataWriter.WriteString(命令);
等待dataWriter.StoreAsync();
}
返回命令大小;
}
}
}
请告诉我如何修复此错误

WP8.1不支持BackgroundWorker。使用Task.Run方法将您的工作重定向到ThreadPool,而不是使用它。正如文章所说:

在几乎所有情况下,基于异步的异步编程方法都比现有方法更可取。特别是,对于IO绑定的操作,这种方法比BackgroundWorker更好,因为代码更简单,并且您不必担心竞争条件。与Task.Run结合使用时,异步编程比BackgroundWorker更适合CPU绑定的操作,因为异步编程将运行代码的协调细节与Task.Run传输到线程池的工作分开

有关更多healp、代码示例和比较,请访问。

WP8.1不支持BackgroundWorker。使用Task.Run方法将您的工作重定向到ThreadPool,而不是使用它。正如文章所说:

在几乎所有情况下,基于异步的异步编程方法都比现有方法更可取。特别是,对于IO绑定的操作,这种方法比BackgroundWorker更好,因为代码更简单,并且您不必担心竞争条件。与Task.Run相结合,异步编程比BackgroundWorker更适合CPU限制的操作,因为异步编程将运行代码的协调细节与工作分离