# thread.command 库模块帮助文档

## thread 成员列表 <a id="thread" href="#thread">&#x23;</a>

### thread.command() <a id="thread.command" href="#thread.command">&#x23;</a>
[返回对象:threadCommandObject](#threadCommandObject)

### thread.command(窗口对象) <a id="thread.command" href="#thread.command">&#x23;</a>
创建线程命令订阅对象,  
省略窗口对象则创建 message only window

## thread.command 成员列表 <a id="thread.command" href="#thread.command">&#x23;</a>

创建线程命令订阅对象,返回对象可传入其他线程使用。  
返回对象添加的成员函数,都可在其他线程中调用。

### thread.command.bind() <a id="thread.command.bind" href="#thread.command.bind">&#x23;</a>
[返回对象:threadCommandBindObject](#threadCommandBindObject)

### thread.command.bind(hwndListener) <a id="thread.command.bind" href="#thread.command.bind">&#x23;</a>
绑定监听对象窗体句柄  
可添加绑定任意个默认调用参数

### thread.command.instance() <a id="thread.command.instance" href="#thread.command.instance">&#x23;</a>
全局单实例线程命令订阅对象  

[返回对象:threadCommandObject](#threadCommandObject)

### thread.command.invoke("命令名",线程函数,调用参数) <a id="thread.command.invoke" href="#thread.command.invoke">&#x23;</a>

```aardio
thread.command.invoke(    
	"/*创建线程  
使用线程函数的返回值作为参数触发该命令*/" ,function( ... ){  

	},   
)
```

### thread.command.post("命令函数名",其他参数) <a id="thread.command.post" href="#thread.command.post">&#x23;</a>
不阻塞调用跨线程命令,不接收返回值  
不指定窗口句柄,所有同名的线程命令函数都会被调用  
函数无返回值

### thread.command.post(窗口句柄,"命令函数名",其他参数) <a id="thread.command.post" href="#thread.command.post">&#x23;</a>
不阻塞调用跨线程命令,  
参数@1指定句柄时,超过消息队列限制发送失败返回false,否则返回true

### thread.command.postIdle(延时值,"命令函数名",其他参数) <a id="thread.command.postIdle" href="#thread.command.postIdle">&#x23;</a>
在指定的延时值内忽略部分消息  
其他同post函数

### thread.command.postIdle(延时值,窗口句柄,"命令函数名",其他参数) <a id="thread.command.postIdle" href="#thread.command.postIdle">&#x23;</a>
在指定的延时值内忽略部分消息  
其他同post函数

### thread.command.send("命令函数名",其他参数) <a id="thread.command.send" href="#thread.command.send">&#x23;</a>
阻塞调用跨线程命令,  
注意send函数发送的消息有可能比之前post函数发送的消息更早被接收  
不指定窗口句柄,所有同名的线程命令函数都会被调用,  
可获取回调函数的返回值,默认返回空值

### thread.command.send(窗口句柄,"命令函数名",其他参数) <a id="thread.command.send" href="#thread.command.send">&#x23;</a>
阻塞调用跨线程命令,  
注意send函数发送的消息有可能比之前post函数发送的消息更早被接收  
可获取回调函数的返回值,默认返回空值

### thread.command.sendIdle(延时值,"命令函数名",其他参数) <a id="thread.command.sendIdle" href="#thread.command.sendIdle">&#x23;</a>
在指定的延时值内忽略部分消息  
其他同send函数

### thread.command.sendIdle(延时值,窗口句柄,"命令函数名",其他参数) <a id="thread.command.sendIdle" href="#thread.command.sendIdle">&#x23;</a>
在指定的延时值内忽略部分消息  
其他同send函数

### thread.command.sendInvoke("命令函数名",其他参数) <a id="thread.command.sendInvoke" href="#thread.command.sendInvoke">&#x23;</a>
调用线程命令并等待返回值,等待过程中不卡界面,  
注意sendInvoke函数发送的消息有可能比之前post函数发送的消息更早被接收  
不指定窗口句柄,所有同名的线程命令函数都会被调用,  
可获取回调函数的返回值,默认返回空值

### thread.command.sendInvoke(窗口句柄,"命令函数名",其他参数) <a id="thread.command.sendInvoke" href="#thread.command.sendInvoke">&#x23;</a>
调用线程命令并等待返回值,等待过程中不卡界面,  
注意sendInvoke函数发送的消息有可能比之前post函数发送的消息更早被接收  
可获取回调函数的返回值,默认返回空值

### thread.command.命令函数名() <a id="thread.command.命令函数名" href="#thread.command.命令函数名">&#x23;</a>
如果命令函数名首字符为$以post模式异步调用命令，  
否则以send模式同步调用该命令,  
传入参数应与该命令定义时预设的形参一致,  
send模式调用可获取回调函数的返回值,默认返回空值

## threadCommandBindObject 成员列表 <a id="threadCommandBindObject" href="#threadCommandBindObject">&#x23;</a>

### threadCommandBindObject.* <a id="threadCommandBindObject.any" href="#threadCommandBindObject.any">&#x23;</a>
调用send函数发送该命令,  
传入参数应与该命令定义时预设的形参一致  
可获取回调函数的返回值,默认返回空值

### threadCommandBindObject.post("字符串参数",) <a id="threadCommandBindObject.post" href="#threadCommandBindObject.post">&#x23;</a>
不阻塞调用跨线程命令

### threadCommandBindObject.postIdle(1000,"字符串参数",) <a id="threadCommandBindObject.postIdle" href="#threadCommandBindObject.postIdle">&#x23;</a>
阻塞调用跨线程命令,  
在参数@1指定的延时值内忽略部分消息

### threadCommandBindObject.send("字符串参数",) <a id="threadCommandBindObject.send" href="#threadCommandBindObject.send">&#x23;</a>
不阻塞调用跨线程命令

### threadCommandBindObject.sendIdle(1000,"字符串参数",) <a id="threadCommandBindObject.sendIdle" href="#threadCommandBindObject.sendIdle">&#x23;</a>
阻塞调用跨线程命令,  
在参数@1指定的延时值内忽略部分消息

## threadCommandObject 成员列表 <a id="threadCommandObject" href="#threadCommandObject">&#x23;</a>

### threadCommandObject.* <a id="threadCommandObject.any" href="#threadCommandObject.any">&#x23;</a>

```aardio
threadCommandObject./*订阅命令函数名字,支持不定个数参数  
如果同一个名字要注册多个回调函数请使用subscribe函数,  
使用"."成员操作符可获取命令调用函数,不可使用下标,  
默认以send模式同步调用，函数名首字符为$以post模式异步调用  
send模式下返回值可阻止命令继续传递*/ = function( ... ){

}
```

### threadCommandObject._form <a id="threadCommandObject._form" href="#threadCommandObject._form">&#x23;</a>
窗体对象  

[返回对象:winform](https://www.aardio.com/zh-cn/docs/library-reference/win/ui/_.html#winform)

### threadCommandObject.hwnd <a id="threadCommandObject.hwnd" href="#threadCommandObject.hwnd">&#x23;</a>
绑定监听对象窗体句柄

### threadCommandObject.invoke( 线程函数,... ) <a id="threadCommandObject.invoke" href="#threadCommandObject.invoke">&#x23;</a>

```aardio
threadCommandObject.invoke( 线程函数,...invoke(  
    function( hwndListener,... ){  
        import thread.command;  
        var notifier = thread.command.bind(hwndListener);  

        notifier.post("begin")   
        notifier.post("end")   
    },...  
)
```

### threadCommandObject.subscribe <a id="threadCommandObject.subscribe" href="#threadCommandObject.subscribe">&#x23;</a>
订阅指定的命令

### threadCommandObject.subscribe("订阅命令名字",回调函数对象) <a id="threadCommandObject.subscribe" href="#threadCommandObject.subscribe">&#x23;</a>
同一个名字可以多此调用此函数添加多个不同的关注回调函数  
回调函数如果返回值可阻止命令继续传递

### threadCommandObject.unsubscribe <a id="threadCommandObject.unsubscribe" href="#threadCommandObject.unsubscribe">&#x23;</a>
取消订阅指定的命令

### threadCommandObject.unsubscribe("订阅命令名字",回调函数对象) <a id="threadCommandObject.unsubscribe" href="#threadCommandObject.unsubscribe">&#x23;</a>
函数无返回值
