我无法在函数中使用函数“ tranferfiles” 。
我该在哪里更改?
该功能应该是公共功能吗?还是只能在创建新类时使用其他功能?
namespace Webshopfiletransfer
{
public partial class Webshopfiletransfer : ServiceBase
{
private static System.Timers.Timer aTimer;
public Webshopfiletransfer()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
SetTimer();
aTimer.Start();
}
private static void SetTimer()
{
// Create a timer with a two second interval.
aTimer = new System.Timers.Timer(30000);
// Hook up the Elapsed event for the timer.
aTimer.Elapsed += OnTimedEvent;
aTimer.AutoReset = true;
aTimer.Enabled = true;
}
private static void OnTimedEvent(Object source, ElapsedEventArgs e)
{
transferfiles("download");
//transferfiles("upload");
}
private void transferfiles(string modus)
{
}
}
}
答案 0 :(得分:2)
您不能在静态方法中调用非静态方法。静态方法或属性只能调用同一类的其他静态方法或属性。
定义静态方法或字段时,它无权访问为该类定义的任何实例字段,只能使用标记为静态的字段。
静态(C#参考):here
更改
private void transferfiles(string modus)
{
}
到
private static void transferfiles(string modus)
{
}
或者您可以创建该类的实例
private static void OnTimedEvent(Object source, ElapsedEventArgs e)
{
Webshopfiletransfer webshopfiletransfer = new Webshopfiletransfer();
webshopfiletransfer.transferfiles("download");
//transferfiles("upload");
}
答案 1 :(得分:1)
我无法在函数中使用函数“ tranferfiles”。
由于您的OnTimeEvent()
是静态函数而您的transferfiles()
不是静态函数,请将transferfiles()
函数更改为静态。
通过将您的transferfiles()
函数更改为静态函数,将在不创建其类实例的情况下调用该函数
private static void transferfiles(string modus)
{
//Your code
}
静态方法和属性无法访问非静态字段,并且 事件(其包含类型),因此无法访问实例 任何对象的变量,除非在方法中明确传递 参数。
答案 2 :(得分:1)
您应将transferfiles
方法标记为静态。
private static void transferfiles(string modus)
答案 3 :(得分:0)
私有功能只能在同一类中使用。 如果要在其他类中(外部)使用它,则必须将其更改为public。
另外检查已经提到的静态内容。可以使用静态函数而无需实例化类中的对象。如果您不想创建对象,请将其更改为static。 否则,请从该类中创建一个对象,然后从该对象中调用传输文件。
答案 4 :(得分:0)
第一种方法,您可以将方法从非静态方法更改为静态方法。
private static void transferfiles(string modus)
{
}
或,您可以在静态方法中创建该类的实例,然后调用它。您必须先创建其父类的实例才能调用非静态方法。因此,从静态方法开始,您将不得不实例化一个新对象。
private static void OnTimedEvent(Object source, ElapsedEventArgs e)
{
Webshopfiletransfer c1 = new Webshopfiletransfer();
c1. transferfiles("download");
}