【发布时间】:2015-11-18 09:13:18
【问题描述】:
我在 windows phone 8.1 中使用 System.componentmodel 引用来获取 BackgroundWorker,但每次我放置 BackgroundWorker 时它都会给我
错误 CS0246 找不到类型或命名空间名称“BackgroundWorker”(您是否缺少 using 指令或程序集引用?) HealthBand C:\Users\husam\Desktop\Projects\HealthBand\HealthBand\ConnectionManager .cs 16
我尝试添加引用,但它说它已经添加 当我把
using System.ComponentModel;
它说使用指令是不必要的
这是我的代码
using System;
using System.Diagnostics;
using System.Threading.Tasks;
using Windows.Networking;
using Windows.Networking.Sockets;
using Windows.Storage.Streams;
using System.ComponentModel;
namespace HealthBand
{
/// <summary>
/// Class to control the bluetooth connection to the Arduino.
/// </summary>
public class ConnectionManager
{
private BackgroundWorker dataReadWorker;
/// <summary>
/// Socket used to communicate with Arduino.
/// </summary>
private StreamSocket socket;
/// <summary>
/// DataWriter used to send commands easily.
/// </summary>
private DataWriter dataWriter;
/// <summary>
/// DataReader used to receive messages easily.
/// </summary>
private DataReader dataReader;
/// <summary>
/// Thread used to keep reading data from socket.
/// </summary>
/// <summary>
/// Delegate used by event handler.
/// </summary>
/// <param name="message">The message received.</param>
public delegate void MessageReceivedHandler(string message);
/// <summary>
/// Event fired when a new message is received from Arduino.
/// </summary>
public event MessageReceivedHandler MessageReceived;
/// <summary>
/// Initialize the manager, should be called in OnNavigatedTo of main page.
/// </summary>
public void Initialize()
{
socket = new StreamSocket();
dataReadWorker = new BackgroundWorker();
dataReadWorker.WorkerSupportsCancellation = true;
dataReadWorker.DoWork += new DoWorkEventHandler(ReceiveMessages);
}
/// <summary>
/// Finalize the connection manager, should be called in OnNavigatedFrom of main page.
/// </summary>
public void Terminate()
{
if (socket != null)
{
socket.Dispose();
}
if (dataReadWorker != null)
{
dataReadWorker.CancelAsync();
}
}
/// <summary>
/// Connect to the given host device.
/// </summary>
/// <param name="deviceHostName">The host device name.</param>
public async void Connect(HostName deviceHostName)
{
if (socket != null)
{
await socket.ConnectAsync(deviceHostName, "1");
dataReader = new DataReader(socket.InputStream);
dataReadWorker.RunWorkerAsync();
dataWriter = new DataWriter(socket.OutputStream);
}
}
/// <summary>
/// Receive messages from the Arduino through bluetooth.
/// </summary>
private async void ReceiveMessages(object sender, DoWorkEventArgs e)
{
try
{
while (true)
{
// Read first byte (length of the subsequent message, 255 or less).
uint sizeFieldCount = await dataReader.LoadAsync(1);
if (sizeFieldCount != 1)
{
// The underlying socket was closed before we were able to read the whole data.
return;
}
// Read the message.
uint messageLength = dataReader.ReadByte();
uint actualMessageLength = await dataReader.LoadAsync(messageLength);
if (messageLength != actualMessageLength)
{
// The underlying socket was closed before we were able to read the whole data.
return;
}
// Read the message and process it.
string message = dataReader.ReadString(actualMessageLength);
MessageReceived(message);
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
/// <summary>
/// Send command to the Arduino through bluetooth.
/// </summary>
/// <param name="command">The sent command.</param>
/// <returns>The number of bytes sent</returns>
public async Task<uint> SendCommand(string command)
{
uint sentCommandSize = 0;
if (dataWriter != null)
{
uint commandSize = dataWriter.MeasureString(command);
dataWriter.WriteByte((byte)commandSize);
sentCommandSize = dataWriter.WriteString(command);
await dataWriter.StoreAsync();
}
return sentCommandSize;
}
}
}
请问我该如何解决这个错误
【问题讨论】:
-
根据at MSDN 所写的内容,BackgroundWorker 仅适用于 WP7.0 和 WP7.1 的 Windows Phone。
-
没有办法解决它或修改代码使其工作
标签: c# windows windows-runtime windows-phone-8.1 backgroundworker