C#带byte[]参数的线程操作

yilaozhuang 2016-08-13 03:05:26
小弟要实现,从主程序传递一个byte[]数据到另一个线程,在byte[]到object的时候看不懂网上的代码,出现错误

class Program
{
static void Main(string[] args)
{
//主程序,从串口定时读取数据,保存到data这个byte[]
//byte[] data = new byte[xx];//xx是个变化的量,最大会超过256,不到512
//为了方便测试,不管读串口的程序,用简单的3个数组来测试后续程序
byte[] data = new byte[3];
data[0]=11;
data[1]=21;
data[2] = 31;
object O_data = Bytes2Object(data);
Thread t = new Thread(new ParameterizedThreadStart(B));
//从网上查了下,线程传递一个参数,必须是object类型,然后有百度了一些byte[]转object函数
t.Start(O_data);

Console.Read();
}

private static void B(object obj)
{
Console.WriteLine("Method {0}!", obj.ToString());

}
//网上直接贴来的函数,看不懂实现机制,想直接用下byte[]转object,用上面的3个数组测试,报下面 的错误
/// <summary>
/// 将一个序列化后的byte[]数组还原
/// </summary>
/// <param name="Bytes"></param>
/// <returns></returns>
public static object Bytes2Object(byte[] buff)
{
object obj;
using (MemoryStream ms = new MemoryStream(buff))
{
IFormatter iFormatter = new BinaryFormatter();
obj = iFormatter.Deserialize(ms);//在分析完成之前遇到流结尾,这里出错??????
}
return obj;
}


/// <summary>
/// 将一个object对象序列化,返回一个byte[]
/// </summary>
/// <param name="obj">能序列化的对象</param>
/// <returns></returns>
public static byte[] ObjectToBytes(object obj)
{
using (MemoryStream ms = new MemoryStream())
{
IFormatter formatter = new BinaryFormatter(); formatter.Serialize(ms, obj); return ms.GetBuffer();
}
}

}
...全文
441 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
除非是线程内部的局部变量,公有数据是不分什么线程的,要不然也没有什么线程同步一说了
Saleayas 2016-08-13
  • 打赏
  • 举报
回复
第一个问题: 线程参数类型是 Object,此时不是需要一个 Object 类型,而是 Object 是基本类型。 byte[] 也是 Object,可以直接传给线程当参数。 在使用的时候,直接转换成 byte[] 就可以使用。 不需要转换的。 第二个问题: 很多的 Object,比如你定义个类型,如果这个类型你需要保存起来,或者传输给其他的使用者。 那么这个 Object 怎么保存呢?需要保存为二进制流, 此时就需要把 Object 转换为二进制流,这个操作就叫做 序列化和反序列化。(Serialize)
Poopaye 2016-08-13
  • 打赏
  • 举报
回复
错误呢???
  • 打赏
  • 举报
回复
直接传就可以了,Bytes2Object和ObjectToBytes中两个函数可以不要。t.Start(data);因为byte数组本来就是Object类型的数据。然后在你的B函数中在转换回来就可以了。
private static void B(object obj)
        { 
            byte[] data = (byte[])obj;
            Console.WriteLine("Method {0}!", obj.ToString());
        }
john_QQ:2335298917 2016-08-13
  • 打赏
  • 举报
回复
直接传不行吗?

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧