以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  委托导致测试表大红叉  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=189553)

--  作者:puma
--  发布时间:2023/12/8 10:30:00
--  委托导致测试表大红叉
Dim t0 As Threading.Thread

t0=New Threading.Thread(Sub() Functions.AsyncExecute("测试"))

Dim btnAuto As WinForm.Button = e.Form.Controls("btnAuto")

Dim bt As WinForm.Button = e.Form.Controls("btnManualClear")
If  bt.text = "手动清除" Then
    btnAuto.Enabled=False
    gbclear=True
    bt.text  = "停止"
    t0.Start()
Else
    gbclear=False
    bt.text  = "手动清除"
    t0.Abort
End If

btnAuto.Enabled=True





Functions.AsyncExecute("测试") 部分代码

With CurrentTable
        \'Dim Positionrow As Integer = .Position
        \'Dim c As Col = .Cols(t.ColSel).name
        \'Dim Colname= c.Name
        If .Position >49  Then
            \'If Positionrow > 49 Then
            MessageBox.show("已到达最大行")
        Else
            \'Dim t As Table = Tables("测试表") \'用这个新增会导致主表定位到其他行
            .Rows(.Position)(.Cols(.ColSel).name) = v3
            .Position = .Position + 1
            \'向下移动一行
            \'End If
        End If
    End With





--  作者:有点蓝
--  发布时间:2023/12/8 10:32:00
--  
不能在异步线程里使用Foxtable的表格,datatable,table都不能使用
--  作者:puma
--  发布时间:2023/12/8 11:15:00
--  
我需要通过com口自动采集数据,通过窗口按钮采集到table表格里。 

如果不用委托,窗口就假死了。应该通过么方式解决?
t0=New Threading.Thread(Sub() Functions.AsyncExecute("测试"))


--  作者:有点蓝
--  发布时间:2023/12/8 11:23:00
--  
使用SQLcommand直接把数据保存到后台数据库
--  作者:puma
--  发布时间:2023/12/8 11:34:00
--  
读取到SQl后,在通过load读取到table表?



这个错误和委托有关系吗?

错误所在事件:全局表事件,CurrentChanged
详细错误信息:
BindingSource 不能是自己的数据源。请不要将 DataSource 和 DataMember 属性设置为循环引用 BindingSource 的值。

CurrentChanged 事件
Dim r As Row = CurrentTable.Current
If r Is Nothing Then 
    Return
End If

--  作者:有点蓝
--  发布时间:2023/12/8 11:49:00
--  
异步线程里用到table绝对会出错

全局表事件,CurrentChanged都有什么代码?

--  作者:puma
--  发布时间:2023/12/8 12:05:00
--  
直接用函数还会错误吗?
t0=New Threading.Thread(Sub() Functions.Execute("测试"))


全局表事件,CurrentChanged
Dim r As Row = CurrentTable.Current
If r Is Nothing Then 
    Return
End If

Dim pr As DataRow : Dim dr As DataRow 
Select Case CurrentTable.Name   \'如果用 e.Table 代替 CurrentTable 会发生错误, 原因不明
    Case "表A"
        dr = DataTables("设置").Find("表单名称 = \'表A\' And 字段名称 = \'字段名\'")
        If dr IsNot Nothing Then
            Try  \'刚登陆系统,
                DataTables("表B").DataCols("字段名").FTPClient.RootDir = dr("值") 
            Catch ex As Exception
                Return
            End Try
        End If
 End select

--  作者:有点蓝
--  发布时间:2023/12/8 13:31:00
--  
只要是在线程里调用的,不管什么方式都会有问题。
--  作者:puma
--  发布时间:2023/12/8 15:21:00
--  
我换了一种思路: 窗口调用线程,  线程调用窗口的按钮。    按钮里触发table的写入事件