嵌入式系统上的匿名线程

时间:2014-05-13 13:01:15

标签: c# wpf multithreading

我是创建线程的新手,所以我尝试了一些代码,它似乎有效。我们有一个连接到成像设备的wpf客户端接口。我们将数据从接口传输到中央服务器进行存储。外部程序员告诉我,在嵌入式系统上创建一个匿名线程并不是一个好主意。但我无法弄清楚原因。

以下是我的代码片段。

new Task(() =>
            {
                using (TCPconnector = new TcpClient(App.CT.CTIpAddress, Convert.ToInt32(App.CT.CTIpPort)))
                {
                    try
                    {

                        using (stream = TCPconnector .GetStream())
                        {
                            writer = new BinaryWriter(stream);
                            writer.Write(deviceCT);
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.Log.Instance.LogFiles["Client"].Add(ex.ToString(), Logger.Log.Status.Exception);
                    }
                    finally
                    {
                        if (stream != null) stream.Close();
                        if (TCPconnector != null) TCPconnector .Close();
                        if (writer != null) writer.Close();
                    }
                }


            }).Start();

他说理论上我可以调用函数内联而不是将它们声明为Task方法。因为我想要关闭的唯一原因是,如果我认为套接字调用将花费太长时间并阻止当前线程(如果它是一个UI线程)。我认为它实际上会阻止。

我认为因为它在UI线程上需要在后台线程上执行。 TCP连接失败可能需要很长时间(在UI挂起时间内)才能超时。

那么,为什么匿名线程在嵌入式系统上不是一个好主意?

1 个答案:

答案 0 :(得分:0)

使用Slugster的评论:

外部开发人员在技术上可能是正确的,因为您没有在物理映像设备上运行匿名线程,因此将该语句应用于您的代码是不正确的。

从长远来看,开发人员和我停战并且代码保留在客户端计算机上。他担心如果它自己移动到成像设备上(独立运行)那么我们就会遇到问题。

使用VS逐步执行代码对这个匿名线程没有任何问题。

祝你好运。