我真的需要你的帮助,并想出这个。
我的项目:
AccessProjectMap
-- MainClass.cs
-- ErrorLog.cs (public)
ThreadProjectMap
-- StartThread.cs
我想在项目启动时将StartThread
设为我的默认项目。现在我需要ThreadProjectMap中的ErrorLog.cs文件。我做了一个参考,我实际上可以说ErrorLog log = new ErrorLog();
也可以。当我尝试在MainClass.cs
中使用ErrorLog时,它也正常工作。
但是我不能在main或DoThreading函数中使用log
。
class StartThread {
static string threadRefresh = ConfigurationManager.AppSettings.Get("refreshTime").ToString();
Access ac = new Access();
ErrorLog log = new ErrorLog();
static void Main(String[] args) {
log.LogMessageToFile("== Start Main() ==");
Thread t = new Thread(new ThreadStart(DoThreading));
t.Start();
Console.Read();
}
static void DoThreading() {
int refresh = 1;
while (true) {
Console.WriteLine("Test");
log.LogMessageToFile("== Test - inside Thread ==");
Thread.Sleep(1000);
}
}
}
答案 0 :(得分:3)
问题不在于不同的项目/命名空间,而是尝试以静态方法访问实例成员。
制作log
字段static
,它应该可以正常编译。
static ErrorLog log = new ErrorLog(); //Here, make it static
static void Main(String[] args) {
log.LogMessageToFile("== Start Main() ==");
Thread t = new Thread(new ThreadStart(DoThreading));
t.Start();
Console.Read();
}
答案 1 :(得分:2)
您在此行上创建ErrorLog的实例:
ErrorLog log = new ErrorLog();
是实例变量。 Main
和DoThreading
方法是静态的。
您有两个选择:将ErrorLog设为静态,如下所示:
static ErrorLog log = new ErrorLog();
或者,只需在静态方法中实例化它。