我已经查看了有关此主题的所有类似问题,但我找不到能够解决我确切问题的答案。
private void Subscribe2Data()
{
// Define parameters for Subscribe method:
//int itemIndex;
//initialize the client subscription handle
clientSubscriptionHandle = 1;
//Paramter to specify if the subscription will be added as active or not
bool active = true;
// The updateRate parameter is used to tell the server how fast we
// would like to see data updates.
int updateRate = 1000;
// The deadband parameter specifies the minimum deviation needed
// to be considered a change of value. 0 is disabled
Single deadBand = 0;
// The revisedUpdateRate parameter is the actual update rate that the
// server will be using.
int revisedUpdateRate;
//Initialize the item identifier values
itemIdentifiers[0] = new ItemIdentifier();
itemIdentifiers[0].ClientHandle = 0;
itemIdentifiers[0].DataType = Type.GetType("System.int16");
itemIdentifiers[0].ItemName = "Channel1.Device1.Data1";
itemIdentifiers[1] = new ItemIdentifier();
itemIdentifiers[1].ClientHandle = 1;
itemIdentifiers[1].DataType = Type.GetType("System.int16");
itemIdentifiers[1].ItemName = "Channel1.Device1.Data2";
itemValues[0] = new ItemValue();
itemValues[0].Value = temp;
ReturnCode returnCode;
try
{
returnCode = DaServerMgt.WriteAsync(clientSubscriptionHandle, ref itemIdentifiers, itemValues);
if (returnCode != ReturnCode.SUCCEEDED)
{
Console.WriteLine("Write request failed");
}
}
catch (Exception ex)
{
Console.WriteLine("WriteAsync exception. Reason: ", ex);
}
靠近底部,表示returnCode = DaServerMgt.WriteAsync..etc。我收到错误"非静态字段,方法或属性需要对象引用"在那条线上。看看其他类似问题的答案,我尝试通过更改" private void Subscribe2Data()"来使我的方法保持静态。 to" private static void Subscrive2Data()。"
这样做使得该方法中的每个变量都具有对象引用错误,而不仅仅是DaServerMgt.WriteAsync行。
然后我尝试使用其中的ReturnCode返回代码部分而不是Subscribe2Data方法创建一个完全独立的方法,并使新方法保持静态,但错误仍然存在。
我也试过
ReturnCode returnCode;
try
{
Service1 p = new Service1();
returnCode = p.DaServerMgt.WriteAsync(clientSubscriptionHandle, ref itemIdentifiers, itemValues);
if (returnCode != ReturnCode.SUCCEEDED)
{
Console.WriteLine("Write request failed");
}
}
catch (Exception ex)
{
Console.WriteLine("WriteAsync exception. Reason: ", ex);
}
编辑:这确实修复了"对象引用。"错误,但现在我正在使用类(我的坏),它给出了其他错误,说Service1不包含对DaServerMgt..etc的定义。 有谁知道我做错了什么?
答案 0 :(得分:0)
制作Subscribe2Data()
无法解决此问题。
问题是在类DaServerMgt
中,函数WriteAsync()
不是静态函数。这意味着当您在DaServerMgt
中调用此函数时,您需要拥有Subscribe2Data()
的实例。
答案 1 :(得分:0)
这个问题是DaServerMgt.WriteAsync()
不是静态的,但你试图像它一样调用它。您需要实例化DaServerMgt
类,然后在该实例上调用WriteAsync()
方法。
DaServerMgt server = new DaServerMgt();
returnCode = server.WriteAsync(clientSubscriptionHandle, ref itemIdentifiers, itemValues);
您的第二次尝试无效,因为您无法实例化(new
)方法,只能构造一个。
在所有情况下,都不需要使您的课程保持静态。