<< 点击显示目录 >> 主页 PVI通信 > PVI帮助信息 > PVI Services > 事件处理 > 同步调用 |
正如多次提到的,PVI服务不支持同步调用。然而,仍然有需要同步调用的情况。下面的例子通过实现 WriteValueSynchron 方法模拟了应用程序中的同步行为 。
Variable var1 = new Variable(cpu,"var_01");
Variable var2 = new Variable(cpu,"var_02");
Variable var3 = new Variable(cpu,"var_03");
var1.Connect();
var2.Connect();
var3.Connect();
// ...所有变量成功连接
WriteValueSynchron(var1,new Value(23),1000);
WriteValueSynchron(var2,new Value(445),1000);
WriteValueSynchron(var3,new Value(0),1000);
/// <summary>
/// Synchronous writing of value
/// </summary>
/// <param name="variable">Variable object</param>
/// <param name="value">Value of variable</param>
/// <param name="timeout">Timeout in milliseconds</param>
private int WriteValueSynchron(Variable variable, Value value, int timeout)
{
// 数据类型检查
if (variable.Value.DataType != value.DataType)
return -1;
// 开始异步调用被设置的值
variable.Value = value;
// 等待,直到数值成功设置
while(variable.Value != value)
{
// 执行事件
Application.DoEvents();
System.Threading.Thread.Sleep(10);
timeout -= 10;
// 如果超过了超时时间
if (timeout <= 0 )
return -1;
}
return 0;
}