15

Using Example 1: Creating, starting, and interacting between threads on this MSDN tutorial more specificaly line 3 to line 7 in the Main()

I have the following code with the following error:

cannot be accessed with an instance reference; qualify it with a type name instead.

Program.cs

public static ThreadTest threadTest = new ThreadTest();
private static Thread testingThread = new Thread(new ThreadStart(threadTest.testThread()));
static void Main(string[] args)
{

}

ThreadTest.cs

public static void testThread()
{
}
Stacked
  • 6,892
  • 7
  • 57
  • 73
Jordan Trainor
  • 2,410
  • 5
  • 21
  • 23
  • 1
    So did you follow trying the advice given in the compiler error? Why do you want an instance of `threadTest` anyway? – Jon Skeet Nov 24 '12 at 20:38
  • Example 1: Creating, starting, and interacting between threads http://msdn.microsoft.com/en-us/library/aa645740(v=vs.71).aspx#vcwlkthreadingtutorialexample1creating more specificaly line 3 to line 7 in the Main() – Jordan Trainor Nov 24 '12 at 20:47
  • Right. Now look at your `testThread` method, and look at the example's `Alpha.Beta` method, look at the difference, and look at the error message again. – Jon Skeet Nov 24 '12 at 20:54
  • Possible duplicate of [Member '' cannot be accessed with an instance reference](https://stackoverflow.com/questions/1100009/member-method-cannot-be-accessed-with-an-instance-reference) – Boiethios Aug 02 '18 at 14:03

1 Answers1

27

Your testThread is a static method, so it's available via type name. So, instead of using isntance threadTest, use ThreadTest type.

// public static void testThread()
testingThread = new Thread(new ThreadStart(ThreadTest.testThread));

Or change method declaration (remove static):

// public void testThread()
testingThread = new Thread(new ThreadStart(threadTest.testThread));

Also you should pass method to delegate ThreadTest.testThread (parentheses removed) instead of passing result of method invokation ThreadTest.testThread().

Sergey Berezovskiy
  • 232,247
  • 41
  • 429
  • 459