江湖救急这次,请各位大侠救我一命,诡异的问题,苦想几天没解决 这个应该是PriShortChamberRecipeArray这个数组变量的生存周期的问题吧,这是定义在方法中的局部变量,你是起线程执行的,等到线程函数开始处理时,该数组已经被释放掉了,虽然没有被销毁,但是内容已经是无法确定的了,可能已经被重新分配了,所以你看到的是一些随机数。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 应该不是,我前后都写log了啊?前后写log的数据没有问题啊? iRet = _AxActQJ71E71TCP.WriteDeviceBlock2("R0", _PriShortChamberRecipeArray.Length, ref _PriShortChamberRecipeArray[0]);这行换成下面的代码试试是否正常iRet = (int)Application.OpenForms[0].Invoke((Func<int>)(() => _AxActQJ71E71TCP.WriteDeviceBlock2("R0", _PriShortChamberRecipeArray.Length, ref _PriShortChamberRecipeArray[0]))); 或者把刚才那行还原,修改这个地方试试t = new Thread(new ThreadStart(tws.ThreadProc));t.ApartmentState = ApartmentState.STA;t.Start();t.Join(); 兄弟,这个方法 不行。上一个方法可以,但是有个问题。如果是winform的话,System.Func有这个,但是WPF的Sytem空间没有这个,请教怎么解决? 具体原因我也不好说,没有的话你声明个delegate T Func<out T>(); 最后一个问题大侠,Application.OpenForms.Count为什么是0?我在类库里面调用的? Application.OpenForms[0].Invoke //这个是winform的,可以用Invoke。Application.Current.Windows[0] //WPF的好像没有Invoke,怎么办? 那就这样iRet = (int)Application.Current.Windows[0].Dispatcher.Invoke(DispatcherPriority.ApplicationIdle, (Func<int>)(() => _AxActQJ71E71TCP.WriteDeviceBlock2("R0", _PriShortChamberRecipeArray.Length, ref _PriShortChamberRecipeArray[0]))); 大侠你好人做到底吧,我发现我的类库里面无法使用Application.Current,只能使用Application.OpenForms,我怎么用我的WPF GUI传递进去? 把项目引用列表里 System.Windows.Forms.dll 这个引用去掉,引用 PresentationFramework.dll,cs 文件里 using System.Windows.Forms; 去掉,加上 using System.Windows; 楼上几位扯远了,居然扯到了多线程开启的方法上面去了,这和问题毫不相干。我想知道你的“t.Join();”肯定存在吗?这个代码意味着多线程和单线程完全相同的效果了,必须等待执行完成后才能返回的。你确定没有同时2个线程一起往设备写? 另外建议yunhaiC 每天上一次论坛,随便回帖一次,每天回帖可得10分可用分,你只有遇到问题才来一发,搞的都没分发帖了,真正有需要的时候发不了高分帖,这将影响到得到解答的效率 帮忙看看这个数据库的访问类是否有问题? 一个事件如何取消另一个事件 发生异常: Invalid URI: The URI is empty. 求解winfrom lable如何透明 ASP.NET URL Rewrite. URL重写 点击按钮,绑定girdview的问题 關於生產排程的問題,我已經做一部分功能,請教該如何完善。 如何让messagebox.show只引出一个对话框? c# 中画正弦曲线问题 关于c#中的数据库开发。 xml读取出路径还原出文件 如何给Dev的schedulerControl控件增加农历显示
应该不是,我前后都写log了啊?前后写log的数据没有问题啊?
这行换成下面的代码试试是否正常
iRet = (int)Application.OpenForms[0].Invoke((Func<int>)(() => _AxActQJ71E71TCP.WriteDeviceBlock2("R0", _PriShortChamberRecipeArray.Length, ref _PriShortChamberRecipeArray[0])));
t = new Thread(new ThreadStart(tws.ThreadProc));
t.ApartmentState = ApartmentState.STA;
t.Start();
t.Join();
如果是winform的话,System.Func有这个,但是WPF的Sytem空间没有这个,请教怎么解决?
delegate T Func<out T>();
最后一个问题大侠,Application.OpenForms.Count为什么是0?我在类库里面调用的?
Application.Current.Windows[0] //WPF的好像没有Invoke,怎么办?
iRet = (int)Application.Current.Windows[0].Dispatcher.Invoke(DispatcherPriority.ApplicationIdle, (Func<int>)(() => _AxActQJ71E71TCP.WriteDeviceBlock2("R0", _PriShortChamberRecipeArray.Length, ref _PriShortChamberRecipeArray[0])));