Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET4.5到.NET4.0上的Wpf应用程序_C#_.net_Wpf_Serial Port_Windows Xp Sp3 - Fatal编程技术网

C# .NET4.5到.NET4.0上的Wpf应用程序

C# .NET4.5到.NET4.0上的Wpf应用程序,c#,.net,wpf,serial-port,windows-xp-sp3,C#,.net,Wpf,Serial Port,Windows Xp Sp3,我面临以下问题:在.NET 4.5中,在Microsoft Visual Studio 2013上开发的应用程序需要在Windows XP平台上工作。我正在使用.NET 4.0重建软件并进行一些修改以增加兼容性,但当我单击按钮时,应用程序崩溃,没有显示明确的错误消息,跟踪资源也没有记录任何内容。在应用程序启动时,我有一个小窗口,要求用户输入您的姓名,该功能运行良好。有人对我能做什么有什么建议吗 编辑1: 以下代码是问题的根源,此代码是使用.NET 4.0编译的: SerialManager.cs

我面临以下问题:在.NET 4.5中,在Microsoft Visual Studio 2013上开发的应用程序需要在Windows XP平台上工作。我正在使用.NET 4.0重建软件并进行一些修改以增加兼容性,但当我单击按钮时,应用程序崩溃,没有显示明确的错误消息,跟踪资源也没有记录任何内容。在应用程序启动时,我有一个小窗口,要求用户输入您的姓名,该功能运行良好。有人对我能做什么有什么建议吗

编辑1:

以下代码是问题的根源,此代码是使用.NET 4.0编译的:

SerialManager.cs


如果我不执行任何实例或对串行端口的引用,则应用程序不会崩溃。是否存在强制.NET3.5编译这部分代码的方法?或者是否存在解决此问题的其他建议?

我在第8期找到的解决方案。安装.NET 4.0更新后,问题不再出现。

如果您有源代码,则应添加更多错误日志记录,或附加远程调试器。考虑到你提供的信息,任何人都很难提出建议。NET 4 WPF应用程序与Windows XP兼容,因此您正在执行的某些操作与您未提供的代码不兼容。请通过运行eventvwr查看Windows应用程序事件日志。EXEVENT Windows XP不受支持,即使是Microsoft也不受支持,您为什么要关心这一点?@HighCore:不支持或不支持,XP在很多地方。通常情况下,企业不想花费数百万美元为本应在5年前退役的现有计算机授权。为AppDomain.CurrentDomain.UnhandledException事件编写事件处理程序从来都不是可选的。请确保记录或显示e.ExceptionObject.ToString的值,以便您知道它失败的原因。
using System;
using System.Windows;
using TestSat;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.IO.Ports;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Text.RegularExpressions;
using System.Diagnostics;

namespace TestSat.DataModel
{
  /// <summary>
  /// 
  /// </summary>
    public class SerialManager : INotifyPropertyChanged
    {

        #region Events

        public event PropertyChangedEventHandler PropertyChanged;
        /// <summary>
        /// 
        /// </summary>
        /// <param name="propertyName"></param>
        protected virtual void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
        }

      /*  [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)]
        public sealed class CallerMemberNameAttribute : Attribute
        {
        }*/

        /// <summary>
        /// 
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="field"></param>
        /// <param name="value"></param>
        /// <param name="propertyName"></param>
        /// <returns></returns>
        protected bool SetField<T>(ref T field, T value, [CallerMemberName] string propertyName = null)
        {
            if (EqualityComparer<T>.Default.Equals(field, value)) return false;
            field = value;
            OnPropertyChanged(propertyName);
            return true;
        }
        #endregion

        #region Private Fields

        private static SerialPort PortaSerial;
        private ObservableCollection<String> mPorts;
        private String mSelectedPort;
        private int mBaudRate = 115200;
        private int mDataBits = 8;

        #endregion

        #region Public Fields
        public StringBuilder logText;
        #endregion

        #region Properties

        /// <summary>
        /// 
        /// </summary>
        public ObservableCollection<String> COMPorts
        {
            get { return mPorts; }
            set { SetField(ref mPorts, value); }
        }



        /// <summary>
        /// 
        /// </summary>
        public String TextoLog
        {
            get { return logText.ToString(); }
            set
            {

                if (logText.Length >= logText.MaxCapacity)
                {
                    logText.Clear();;

                    logText.Append(value);
                }
                else
                {
                    logText.Append(value);
                    //MainWindow.last = value;
                }
                OnPropertyChanged("TextoLog");
            }

        }

        /// <summary>
        /// 
        /// </summary>
        public String SelectedPort
        {
            get { return mSelectedPort; }
            set {SetField(ref mSelectedPort, value); }
        }

        #endregion

        #region Construtors

        /// <summary>
        /// 
        /// </summary>
        public SerialManager()
        {
            InitComponents();
        }

        /// <summary>
        /// 
        /// </summary>
        private void InitComponents()
        {
            RefreshPorts();

            /*Initialize the log variable*/
            logText = new StringBuilder();

            /* Update selected port */
            SelectedPort = COMPorts.Count > 0 ? COMPorts[0] : "";


        }

        #endregion

        #region Public Methods

        /// <summary>
        /// 
        /// </summary>
        public void RefreshPorts()
        {
            // Update ports
            string[] pPorts = SerialPort.GetPortNames();
            // Sort alphabetically
            Array.Sort(pPorts);
            // Sort by string length
            Array.Sort(pPorts, (x, y) => x.Length.CompareTo(y.Length));

            // Create collection
            COMPorts = new ObservableCollection<string>(pPorts);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="mSelectedPort"></param>
        public void ConnectSerial(String mSelectedPort)
        {
            PortaSerial = new SerialPort();
            PortaSerial.PortName = mSelectedPort;
            PortaSerial.BaudRate = mBaudRate;
            PortaSerial.Parity = Parity.None;
            PortaSerial.DataBits = mDataBits;
            PortaSerial.StopBits = StopBits.One;
            PortaSerial.Handshake = Handshake.None;
            PortaSerial.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
            Trace.WriteLine("DataReceived definida");
            try
            {
                PortaSerial.Open();
            }
            catch (SystemException)
            {
                MessageBox.Show("A porta serial esta sendo usada em outra aplicação.", "Erro", MessageBoxButton.OK);
                throw new SystemException();
            }

        }

        /// <summary>
        /// 
        /// </summary>

        public void DesconnectSerial()
        {
            if (PortaSerial.IsOpen)
            {
                PortaSerial.Close();
            }
        }

        /// <summary>
        /// 
        /// </summary>
        public void writeSerial(String text)
        {
            if (PortaSerial.IsOpen)
            {
                if (text.Length > 0)
                {
                    /* char[] array = text.ToCharArray(0,text.Length);
                     foreach(char ch in array)
                     {
                         PortaSerial.Write(ch.ToString());
                         Thread.Sleep(50); 

                     }*/
                    PortaSerial.WriteLine(text);
                }
                else
                {
                    PortaSerial.WriteLine("");
                }

            }
            else
            {
                MessageBox.Show("Porta serial não esta aberta.", "Erro", MessageBoxButton.OK);
                Console.WriteLine("Porta serial não esta aberta");
            }


        }

        /// <summary>
        /// 
        /// </summary>
        public bool IsOpen()
        {
            return PortaSerial.IsOpen;
        } 


        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
        {

            MainWindow.StartRawData = true;
            SerialPort sp = (SerialPort)sender;
            string indata = sp.ReadExisting();
            TextoLog = indata;

          /*Omited code only logical operation*/

        }

        #endregion
    }
}