Solved

Accessing a value in a static method

Posted on 2007-11-20
11
335 Views
Last Modified: 2013-12-17
Hi,

I have this code:

        public static void DownloadLastPostStringInBackground(string address)
        {
            WebClient client = new WebClient();
            Uri uri = new Uri(address);

            // Specify that the DownloadStringCallback method gets called
            // when the download completes.
            client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(DownloadLastPostStringCallback);
            client.DownloadStringAsync(uri);
        }

        private static void DownloadLastPostStringCallback(Object sender, DownloadStringCompletedEventArgs e)
        {
            // If the request was not canceled and did not throw
            // an exception, display the resource.
            if (!e.Cancelled && e.Error == null)
            {
                string textString = (string)e.Result;

                Check(Convert.ToInt32(textString));
            }
        }

Now Check() method called from DownloadLastPostStringCallback is not a static method (I can't make it static because I'm changing the properties of some control from it) and therefore I'm getting an error message saying:

Error      1      An object reference is required for the nonstatic field, method, or property '....FormStartup.Check(int)'      ...      225      17      ...

Your help would be appreciated.
0
Comment
Question by:EEssam
  • 4
  • 4
  • 3
11 Comments
 
LVL 37

Expert Comment

by:gregoryyoung
ID: 20324384
make them not static ....
0
 
LVL 8

Expert Comment

by:static-void
ID: 20324517
what static means is that it doesnt need anything to be instanstiated before you run the code. Ie it only relies on static members and constants. If you need to use soemthing non static you cant declare the function as static.
0
 

Author Comment

by:EEssam
ID: 20324943
There should be a solution.
0
 
LVL 8

Expert Comment

by:static-void
ID: 20325055
not a tidy one. You could staticly instanstiate your class somewhere and call the function on the static version of itself but why on earth would you do that?
0
 
LVL 37

Expert Comment

by:gregoryyoung
ID: 20325072
Why is it important that these methods are static? there is almost no overhead for making this an instance method unless you have millions of instances
0
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 

Author Comment

by:EEssam
ID: 20325078
Good question. Check here:

http://msdn2.microsoft.com/en-us/library/system.net.downloadstringcompletedeventargs(VS.80).aspx

Thread Safety
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
0
 
LVL 8

Expert Comment

by:static-void
ID: 20325106
ummmm thread safety is a completely seperate issue, if your trying to break into a non-thread safe meathod from something you want to be thread safe then your going to have issues. The only thing i can think of for you is to instansiate your class and call tmp.Check(). You cant have a static member access a non static one, it just wont work.
0
 

Author Comment

by:EEssam
ID: 20325114
I just removed "static" keyword from the two methods and they still work.

What may be the side effect?

I'm not experienced in C# or .NET.

Please advise.
0
 
LVL 37

Accepted Solution

by:
gregoryyoung earned 300 total points
ID: 20325122
EEssam you are missing the concept of static methods and thread safety there ...

It is saying that if *IT* has a method that is static you can assume it to be thread-safe but instance methods it defines are to be assumed to be non-thread-safe ...

This is a disclaimer on every page in MSDN ... It does not apply to your code ...

Cheers,

Greg
0
 
LVL 37

Expert Comment

by:gregoryyoung
ID: 20325128
both of your methods look fine (they don't access internal state). The one I would have worries about is your Check() method ... Does it change internal state in a non-atomic way (i.e. is it ok to be re-entrant?). You can put up code for it if you like and I can probablytell you but if it calls other methods then I would need to see them too most likely.
0
 
LVL 8

Assisted Solution

by:static-void
static-void earned 200 total points
ID: 20325131
potential issue with thread safety is that you get a concurrent access problem if two things try to change an object at the same time. You need to make sure that your code wont do this.
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

In my previous article (http://www.experts-exchange.com/Programming/Languages/.NET/.NET_Framework_3.x/A_4362-Serialization-in-NET-1.html) we saw the basics of serialization and how types/objects can be serialized to Binary format. In this blog we wi…
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.
You have products, that come in variants and want to set different prices for them? Watch this micro tutorial that describes how to configure prices for Magento super attributes. Assigning simple products to configurable: We assigned simple products…

743 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now