Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8324933
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 9, 20262026-06-09T00:15:32+00:00 2026-06-09T00:15:32+00:00

For some reason i have a hard time calling a delegate method from within

  • 0

For some reason i have a hard time calling a delegate method from within a thread in Windows service. Don’t think environment makes that much of a difference, but want you to understand why i can’t just step through this code in debugger (trace-logging is quite possible though). Below is a simplified outline; all i want is to execute a callback from the main class to deal with received data (my desire is to separate data-processing implementation [involving too many other dependencies] from BaseSvc‘s library code):

public class    BaseSvc         // library class (separate DLL)
{
    public delegate     bool    dlProcCmd( byte[] bData );
    public static   dlProcCmd   fnProcCmd;

    public static void      Start( )                                // 1
//  public static void      Start( BaseSvc.dlProcCmd ProcCmd )      // 2
    {
//      BaseSvc.fnProcCmd=  ProcCmd;                                // 2
        ..
        bListen=    true;
        thTcpComm=  new Thread( new ThreadStart( TcpComm ) );
        thTcpComm.Start( );
    }
    ..
    public static void      TcpComm( )
    {
        ..
        while(  bListen  )
        {
            ..
            if(  fnProcCmd != null  )
            {
                Utils.Log( fnProcCmd.Method.ToString( ) );
                    // prints:Boolean ProcCmd(Byte[])
                fnProcCmd( bData );     // throws:
                    // Void TcpComm():  System.NullReferenceException
                    // Object reference not set to an instance of an object.
            }
        }
    }
    ..
}

..

public partial class    WinSvc : ServiceBase        // SCM-compatible .exe
{
    /// <summary>Handles Start command</summary>
    protected override void     OnStart( string[] args )
    {
        BaseSvc.fnProcCmd=  ProcCmd;                                // 1a
//      BaseSvc.fnProcCmd=  new BaseSvc.dlProcCmd( ProcCmd );       // 1b
//      BaseSvc.fnProcCmd+= new BaseSvc.dlProcCmd( ProcCmd );       // 1c
        BaseSvc.Start( );                                           // 1
//      BaseSvc.Start( new BaseSvc.dlProcCmd( ProcCmd ) );          // 2
        ..
    }

    public bool     ProcCmd( byte[] bData )
    {
        ..
        return  true;
    }
}

At first i thought smth is wrong with declaration or initialization of the delegate method, so various tries are marked with 1a, 1b, 1c and 2. However, in either scenario i end up with a trace printout confirming that if( fnProcCmd != null ) check passed, followed by a NullRefException. bData argument is initialized at that moment, 100% guaranteed and confirmed by tracing, so that leaves only fnProcCmd as the culprit. But it is initialized, is it not!? What am i missing here??

Could it be that the execution context for WinSvc class is different from that of BaseSvc, and/or that TcpComm( ) executes in its own thread? I’d expect a more intuitive error in that case..

I must be doing smth wrong. What should i do to enable such a callback?

UPDATE: After Henk’s suggestion i commented out ProcCmd‘s body and the problem disappeared, => issue is within that code and has nothing to do with the delegate mechanism. Sorry for confusion.
(BTW, using delegate via scenario 1a works fine.)

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-09T00:15:33+00:00Added an answer on June 9, 2026 at 12:15 am

    Looking at this part:

            if(  fnProcCmd != null  )
            {
                Utils.Log( fnProcCmd.Method.ToString( ) );
                    // prints:Boolean ProcCmd(Byte[])
                fnProcCmd( bData );     // throws:
                    // Void TcpComm():  System.NullReferenceException
                    // Object reference not set to an instance of an object.
            }
    

    The null-checking on fnProcCmd is extensive and convincing so it must be something happening inside ProcCmd() .

    To home in on the error, try it with an empty ProcCmd() :

     public bool     ProcCmd( byte[] bData )
     {
        //    ...
        //
        //    ...
        return  true;
     }
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

For some reason I have always assumed that most of the time a variable
I use prototype since a long time, but for some reason I have to
For some reason i'm really having a hard time wrapping my head around HABTM
For some reason I have to access Jenkins global environment variables like BUILD ID,
For some reason I have a very ugly orange part of a border around
For some reason I have a black underlay under my round rect buttons. This
for some reason the label in my uitableviewcell changes position when I have an
I have some ActionScript3 code that for some reason only crashes in a stack
For some reason I am getting the error No database selected I have no
I have a following program but for some reason it is throwing an error

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.