为了账号安全,请及时绑定邮箱和手机立即绑定

关于反射取数据和事件不触发问题,大家帮我看看代码,哪里不对了!!!

关于反射取数据和事件不触发问题,大家帮我看看代码,哪里不对了!!!

莫回无 2018-12-07 00:19:56
DLL程序代码 using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms; namespace DataLogic{    public partial class Form1 : Form    {        public static IList<string> strlist =new List<string>();         public static string va = "";         public Form1()        {            InitializeComponent();        }         public void StartLink()        {            for (int i = 1; i < 10; i++)            {                axRFNCCTL1.Devices.Add(i);            }             axRFNCCTL1.CommPort = "COM4";            axRFNCCTL1.BaudRate = "38400";            axRFNCCTL1.OpenLine();            axRFNCCTL1.SetLostFrameBehaviour(true, 1, 2);             axRFNCCTL1.Satellites.Add(2);            axRFNCCTL1.Satellites.get_Satellite(2).Alive();             TBStarLink.Text = Convert.ToDateTime(DateTime.Now).ToShortTimeString();             axRFNCCTL1.OpenNetwork();        }         public void OpenLink()        {            axRFNCCTL1.CloseNetwork();        }                 /// <summary>        /// 扫描枪发送接收事件        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void axRFNCCTL1_DataEvent(object sender, AxNRFCCTLCONTROLLib._IRFNCCTLEvents_DataEventEvent e)        {             string a = axRFNCCTL1.Devices.get_Device(e.devID).DeviceData.ToString();             setArray(a);             axRFNCCTL1.Devices.get_Device(e.devID).DataWrite(a + result, (short)(a.Length + a.Length));                         }         /// <summary>        /// 扫描枪连接事件        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void axRFNCCTL1_AliveEvent(object sender, AxNRFCCTLCONTROLLib._IRFNCCTLEvents_AliveEventEvent e)        {            TBStarLink.Text = "连接AP成功!";        }                 public bool setArray(string str)        {            strlist.Add(str);            return true;        }                public static string getArray()        {                       foreach (string str in strlist)            {                va += str + "*";            }             strlist.Clear();                                        return va;        }}   主程序代码(动态调用DLL) using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms; using System.Reflection; namespace Test{    public partial class Form3 : Form    {        public Form3()        {            InitializeComponent();        }         private object Invoke(string lpFileName, string Namespace, string ClassName, string lpProcName)        {            try            { // 载入程序集                 Assembly MyAssembly = Assembly.LoadFrom(lpFileName);                Type[] type = MyAssembly.GetTypes();                foreach (Type t in type)                {// 查找要调用的命名空间及类                     if (t.Namespace == Namespace && t.Name == ClassName)                    {// 查找要调用的方法并进行调用                         MethodInfo m = t.GetMethod(lpProcName);                        if (m != null)                        {                            object o = Activator.CreateInstance(t);                             //string s = (string)m.Invoke(o, null);                            return m.Invoke(o,null);                        }                        else MessageBox.Show(" 装载出错 !");                    }                }            }//try             catch (System.NullReferenceException e)            {                MessageBox.Show(e.Message);            }//catch             return (object)0;         }           /// <summary>        /// 取数据        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void button1_Click(object sender, EventArgs e)        {            MessageBox.Show(Invoke("DataLogic.exe", "DataLogic", "Form1", "getArray").ToString());         }         /// <summary>        /// 启动扫描枪        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void button2_Click(object sender, EventArgs e)        {            Invoke("DataLogic.exe", "DataLogic", "Form1", "StartLink");        }         /// <summary>        /// 关闭扫描枪        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void button3_Click(object sender, EventArgs e)        {            Invoke("DataLogic.exe", "DataLogic", "Form1", "OpenLink");        }     }} 首先我点击button2_Click启动扫描枪,然后使用扫描枪扫条码,这是DLL的axRFNCCTL1_DataEvent事件会触发接收数据并调用setArray()方法存储数据,这是strlist已有数据,我点击button3_Click取数据,取到扫的条码数据。但这时我再扫条码axRFNCCTL1_DataEvent事件就不触发了,我不知道为什么,一但我点击button3_Click事件就再不能扫描,axRFNCCTL1_DataEvent事件也就不会触发了,我郁闷了!~不知道为什么 如果我不button3_Click,就一直可以扫描,axRFNCCTL1_DataEvent事件也一直触发。 大家帮我想想为什么,好奇怪啊!!!!!!!
查看完整描述

1 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

if (s == false)
                            {
                                o = Activator.CreateInstance(t);
                                s = true;
                            }

调用一次

查看完整回答
反对 回复 2019-01-21
  • 1 回答
  • 0 关注
  • 348 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信