我需要做的是自助服务终端应用程序,它从串行端口读取信息,并根据收到的数据在三种不同的表单之间切换。表格也可以通过按钮在彼此之间切换。
simplyfing:
1 Form1有效,直到收到数据
2个主程序读取数据
3 form1已关闭
4 form2 opend和精心复制的数据
单击5 form2按钮
6 form3打开
7表格2关闭
8循环重启
我的方法 就是用这个例子 https://www.codeproject.com/Articles/7536/How-To-Swap-Top-Level-Forms?msg=969882并且我对ApplicationContext进行了修改但是如果我使用originale示例它可以工作,但我不知道如何使用委托传递方法,如果我使用修改后的代码,则可以传递委托表单冻结和一段时间形式不公开。我不确定这是一种麻烦的方式,我无法将readin串行数据移动到form1
要遵循的任何建议或示例?
ko.observableArray.fn.refresh = function (item, index) {
if (index==null) index = this['indexOf'](item);
if (index >= 0) {
this.splice(index, 1, ko.utils.extend({}, item)) // create new item
//this.splice(index, 1);
//this.splice(index, 0, item);
}
}
答案 0 :(得分:0)
它冻结是因为您的SerialReceived方法中有use Monolog\Logger;
use Monolog\Handler\StreamHandler;
$ipAddress = GeoIp\Manager::getRealIp();
$geoResult = GeoIp\Manager::getDataResult($ipAddress, 'ru');
$logger = new Logger('Debug');
$logger->pushHandler(new StreamHandler($_SERVER['DOCUMENT_ROOT'].'/logs/geo.log', Logger::DEBUG));
$logger->info('Location:', array('object' => print_r($geoResult, true)));
。因此,如果您获得了大量数据,那么您在任何时候都会被冻结。
您的串行IO事件中不应该有线程暂停,因为它会备份数据,并且根据您的波特率,您可能会丢失数据(底层芯片,称为UART不带有数据)很多板载内存来存储所有缓冲的数据。)