以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]httprequest下异步编程异常  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=180286)

--  作者:xubing051018
--  发布时间:2022/10/12 10:21:00
--  [求助]httprequest下异步编程异常
httprequest下有两个事情,事件A比较耗时,用了异步函数。 事件B没有用异步。
Select Case e.Path
    Case "a.htm"
        
e.AsyncExecute = True  
\'

        Functions.AsyncExecute("A", e) 
\'
Case "b.htm"
        Functions.Execute("B", e) 

End
 Select

实际运行,不同时间分别访问a,b事件都是正常的,没有问题。 
但是如果在访问a事件的等待返回结果的过程中,访问b事件,系统就会报错。 求教是什么原因。

--  作者:xubing051018
--  发布时间:2022/10/12 10:22:00
--  
B函数是用来统计数据的,代码如下:

Dim e As RequestEventArgs = args(0)

Dim wb As New weui

    Dim b As New SQLGroupTableBuilder("tb_grp","tb_frm_Scan")
    b.C
    b.AddTable("tb_frm_Scan","FrameID","tb_frm_FtoM","FrameID") \'添加统计表
    b.AddTable("tb_frm_FtoM","ModelID","tb_frm_model","ModelID") \'添加统计
    b.Groups.AddDef("OrderID","订单号") \'根据产品分组
    b.Groups.AddDef("ScanEvent","扫码事件") \'
    b.Totals.AddDef("StockQty", AggregateEnum.Count , "车架数量")
    b.Totals.AddDef("StockQty","在库数量") \'对数量进行统计
    b.VerticalTotal = True
    Dim bt As DataTable = b.Build(True) \'生成统计表   
    With wb.AddTable("","Table3")
        .CreateFromDataTable(bt,True)
    End With

e.WriteString(wb.Build)

[此贴子已经被作者于2022/10/12 10:23:27编辑过]

--  作者:xubing051018
--  发布时间:2022/10/12 10:22:00
--  
报错截图

图片点击可在新窗口打开查看

图片点击可在新窗口打开查看

图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2022/10/12 10:33:00
--  
如果在访问【a.htm】的时候,还没有返回结果,这时直接关闭【a.htm】,然后打开【b.htm】,a函数就会出现上面第一个图片的错误,连接被关闭,因为【a.htm】被关闭了。

可以屏蔽掉这种错误,然后记录到日志中:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=173590

--  作者:xubing051018
--  发布时间:2022/10/12 10:41:00
--  
没理解。  
直接关闭a.htm是什么意思?   我是两个不同的客户端分别访问a,b事件的。    客户端1访问a事件,等待返回结果,并没有去关闭a.htm.  
此时 客户端2 访问b.htm, 然后就报错了。 
屏蔽这个报错,客户端2能够正常访问b.htm得到返回结果?
[此贴子已经被作者于2022/10/12 10:44:18编辑过]

--  作者:有点蓝
--  发布时间:2022/10/12 10:45:00
--  
不同客户端访问正常不会互相影响的,除非2个页面操作的都是数据库同一个表,导致数据库表被锁,然后数据库访问出错。

如果是httprequest事件代码逻辑有缺陷,请把整个httprequest事件完整代码,以及异步函数的完整代码发上来看看

--  作者:xubing051018
--  发布时间:2022/10/12 10:53:00
--  
项目事件BeforeShowErrorMessage在Foxtable捕获错误并即将显示错误信息前执行。
Functions.Execute("LogText",e.ex,e.Event)
e.Cancel = True

用这种方式并没有能够屏蔽报错,还是弹出错误弹框。

--  作者:有点蓝
--  发布时间:2022/10/12 11:00:00
--  
不可能。除非是您自己写代码弹窗的