|
Thanks for making it all seem logical .
Getting rid of dispose does fix it of course.
As an aside, when would one expicitly call dispose in a program?
Glen Harvy
|
|
|
|
|
|
Hi,
My scenario is as follows:
I spawn mukltiple threads simultaneously and all threads invoke functions simultaneously. These functions are in a single threaded application. What happens if one thread invokes the function and before it completes its processing, another thread also invoke it? Will both the threads execute the function simultaneously or will one thread complete its operation and only then the other will start processing?.
In my case I want one specific function to be executed synchronously. Only one thread should execute it at a time because it makes use of certain resources whic can be used by only one thread at a time. How to lock the entire method?
Can
lock(this)
{
//Code goes here...
}
be used in this scenario.
It would be better if any of you are able to suggest a solution for this.
Thanks and Regards
Madhu
|
|
|
|
|
Hello
Forget the crap I said in my last post. I told you my mind was crashed back then.
Anyway, here is the right thing. Two Approaches: Note: x is your object
1- Use the lock statement:
lock(x)
{
DoSomething();
}
2- Use the
System.Object obj = (System.Object)x;
System.Threading.Monitor.Enter(obj);
try
{
DoSomething();
}
finally
{
System.Threading.Monitor.Exit(obj);
}
The above codes are quoted from MSDN.
I think you already got that by now, but I want to post that just in case you didn't.
Regards
|
|
|
|
|
Hie,
i need to know how to enumerate all pcs.. connected locally to the users computer.. also i need to display this information in a treeview.. .. i need to show the workgroups and the pcs in them....and also list all the mapped drives .... i have C# 2005 .. .NET 2.0 so i'll need to know how to do it with System.Net(i think.. i jst started C#)
would someone give me a WELL COMMENTED example code.. or perhaps a link to an article or tutorial??
i got no answer on the MSDN forums so PLEASE HELP
Thanx
Gideon
|
|
|
|
|
Hello
giddy_guitarist wrote: i jst started C#
Just started C# and you want to map a network?!! Did you try MSDN library -not the forums-
Anyway, most of what you need is in the System.Net.NetworkInformation namespace, especially IPGlobalProperties class. Look them up in your MSDN documentations.
giddy_guitarist wrote: would someone give me a WELL COMMENTED example code
Try the examples of MSDN in the above classes. If you're stuck with something, we are here.
Regards
|
|
|
|
|
|
hey.. listen.. i did extensive readin on System.Net
IPGlobalProperties-> Provides information about the network connectivity of the local computer. .. i want to enum. neworks remember... AND i found some code that claims to enum. networks with System.DirectoryServices... .BUT i dont understand any of the code cuz... well its not commented at ALL!
it was originally in VB.NET... i got someone to port it to C# .. but the problme is i CAN:T check if it works on my PC!!.. cuz i dont hav networks.. COULD SOMEONE PLEASE TELL ME IF THE FOLLOWING CODE WORKS!/?
<br />
private void btnList_Click(object sender, EventArgs e) <br />
{<br />
DirectoryEntry entryRoot = new DirectoryEntry("WinNT://" + this.tbComputerName.Text.ToUpper(), "", "", AuthenticationTypes.None);<br />
<br />
DirectoryEntries memberEntries = entryRoot.Children;<br />
<br />
this.lvUsersGroups.SmallImageList = this.ImageList1;<br />
foreach (DirectoryEntry member in memberEntries)<br />
{<br />
if(member.SchemaClassName.Equals("User"))<br />
this.lvUsersGroups.Items.Add(member.Name, 0);<br />
<br />
if(member.SchemaClassName.Equals("Group"))<br />
this.lvUsersGroups.Items.Add(member.Name, 1);<br />
} <br />
}<br />
<br />
You will, of course, need to wire up btnList's Click event to call the above handler if you haven't already done so:<br />
<br />
this.btnList.Click += new System.EventHandler(this.btnList_Click);
heres where i got the original code - > http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=3213&lngWId=10[^]
PLEASE TELL ME IF EITHER ONE DOES THE JOB?
Thanx
Gideon
|
|
|
|
|
Hello
Easy Tiger!!
Well, yes it works, and shows my shared network printer if supplied with the computer name that's connected to the printer. Well done!!
I thought you wanted to enumerate connected PCs. What this code does is to enumerate shared folders on a Pc name that you supply!! What good is that for you? Otherwise from where do you get the this.tbComputerName ??
As for the network problem. If you don't have more that one computer, you can download Microsoft's Virtual PC 2004 for free, and make a virtual network between your machine and the "Virtual PCs". This way you can test and modify you code step by step on your "Virtual network". Google for "Microsoft Virtual PC".
Regards
|
|
|
|
|
oh hey thats just what i needed..! virtual PC!.. .. thanx!
well .. yes.. i want to enum. pcs. .. before i started c# , i somehow figured out how to enum with the WNetOpenEum , and its companion API!... IN VB6 ... so do u think i should just go for enumerating with API , or can i do it in system.net or system.directoryservices... i got an offer to make booking application.. my boss has around 3-4 pcs..and the app. should basically just list the full path to all availiable pcs....
if theres no way with the .NET classes .. would u happen to know a tute for:
1. using simple API in C#
2. using the WNetOpenEnum in C#
Gideon
|
|
|
|
|
Hello
giddy_guitarist wrote: i got an offer to make booking application
Congratulations!
giddy_guitarist wrote: just list the full path to all availiable pcs....
All right!! Here is the code:
IPGlobalProperties MyIP = IPGlobalProperties.GetIPGlobalProperties();
string RemoteComputer = "";
foreach(TcpConnectionInformation Con in MyIP.GetActiveTcpConnections())
{
try { RemoteComputer = Dns.Resolve(Con.RemoteEndPoint.Address.ToString()).HostName; }
catch { }
if (RemoteComputer.Length == 0)
continue;
if (!listBox2.Items.Contains(RemoteComputer))
{
listBox2.Items.Add(RemoteComputer);
}
}
This should enum all tcp connections -including those on your LAN-. To identify those on the lan use there IP address. They shouild be similar, first 3 numbers are usually the same eg.
178.65.32.103
178.65.32.106
178.65.32.201
178.65.32.305
giddy_guitarist wrote: just list the full path to all availiable pcs....
Simply: @"\\" + RemoteComputer
giddy_guitarist wrote: using simple API in C#
You are talking about P/Invoke. There are tons of articles about this topic here in CP
Regards
|
|
|
|
|
|
Hi All,
I want to send fax for the invoice generated through my web application using a fax voice modem. I have tried to utilise the MS Extended Fax API but not much help is available for that. Can anyone suggest some third party API for the same or any other solution which can be utilised. Thanx in advance.
Regards
|
|
|
|
|
Please tell me how to set the visibility of label item under collections inStatusTool Strip control? Also how to access the label item with the help of EventArgs obbject? eg. e.????
|
|
|
|
|
Hello
statusStrip1.Items["Label Name"].Visible = true;
rasper wrote: Also how to access the label item with the help of EventArgs obbject?
What is your event handler??
Regards
|
|
|
|
|
Hello, all. I've gotten a lot of help off this forum in the past, and I appreciate it! I hope someone can help me out with this one.
I have a timer, and I want the Interval to be as small as possible (timer to run as fast as possible). However, when I set it to 1, the program actually runs slower than if I set it to a more realistic number (like 30 or 50). This is because I have a number of steps to take with each tick. If the timer were just waiting for the previous tick to finish, there would come a point at which smaller and smaller Intervals wouldn't change the speed of the timer. But, the action does, in fact, slow down more and more with small values. This tells me that the timer is skipping a tick if the previous tick hasn't finished (just a theory, mind you).
Is there a way I can make the program tell me when the Interval is too small? I want it to realize when it's not finishing the code in the tick handler fast enough.
Ideas, anyone?
-Daniel
Typing too fast fro my owngood
|
|
|
|
|
Hello
First I must say it's an interesting post you've made. Got my 5
To the issue. I thought of several solutions to this. The best thing I came up with is to test the time - or average time- of excution of your code. Maybe like this
Long FirstTick;
long BestInterval;
private void MyTickEventHandler(object sender, EventArgs e)
{
FirstTick = DateTime.Now.Ticks;
BestInterval = DateTime.Now.Ticks - FirstTick;
}
Well, I hope this works!!
Regards
|
|
|
|
|
I thought about it for a while, before I saw your reply. You're right, monitoring DateTime.Ticks is best for my situation. I decided to monitor DateTime.Now.Ticks, and keep track of the difference between how long an iteration is supposed to take, and how long it actually takes. If it was more than a certain threshold (one millisecond... I know, that's a lot), then I threw an exception. Then, instead of throwing an exception, I just increased the timer's interval. I've gotten it to run at 60 milliseconds per timer interval without a hitch.
I'll keep my checks in there, to monitor its progress with my changes (I intend to add a little more code per tick).
Thanks for the help!
-Daniel
Typing too fast fro my owngood
|
|
|
|
|
Hi there,
Which timer are you using? Windows based? the one which is in toolbar?
Did you try System.Timers.Timer? It uses Threadpool if interval is smaller than the processing time of Elapsed event handler.
Hope this might help.
|
|
|
|
|
I'm using System.Windows.Forms.Timer.
I don't have a "toolbar" because I'm using Notepad and csc.exe (it's the manly way to program, although I revert to VS2k5 for hairy problems).
-- modified at 20:48 Friday 25th August, 2006
-Daniel
Typing too fast fro my owngood
|
|
|
|
|
And probably OS dependent as well. I would imagine the best way would be to profile the method in the tick timer. The profiler may be part of the CLR (don't know never checked) then you can dynamically check the profile to set the timer tick.
On two occasions I have been asked [by members of Parliament], 'Pray, Mr. Babbage, if you put into the machine wrong figures, will the right answers come out?' I am not able rightly to apprehend the kind of confusion of ideas that could provoke such a question. - Charles Babbage
|
|
|
|
|
I don't know what it means to "profile" a method. I suspect it's a little deeper than what is needed for this program I'm working on. However, (pardon the pun) thanks for the pointer!
-Daniel
Typing too fast fro my owngood
|
|
|
|
|
Just a small question beside your actual problem:
If you really want to call some function/do some task repeatedly as fast as it is possible why do you use a timer (and not some kind of loop - probably in another thread)?
|
|
|
|
|
Why have I chosen a System.Windows.Forms.Timer? Because, I've been told by a CS PHD at my local University, multithreading is not advantageous if you're just trying to do something faster. The CPU can really only process information at a certain speed, and making two threads won't make it faster. I understand that multiple threads is handy when you want things to run independent of each other, but it's not for making a linear sequence of actions run faster. Besides, it's just a game.
On a side note, considering there are multiple entities in the game that are meant to run as autonomously as can be faked, I did consider making each entity run in its own thread. However, I decided against it, just to keep things simple.
-Daniel
Typing too fast fro my owngood
|
|
|
|
|
System.Windows.Forms.Timer is based on the WM_TIMER message with all of its associated limitations. Significantly, it is the lowest priority event of all, after painting the window. Any other message handlers which take a significant time will hold up the processing of the timer event. The system will post another timer event after the time has elapsed after the previous one was processed. The resolution of the timers is the same as the system timer tick, which on Windows XP is 15ms. On Windows 98 it is 55ms IIRC.
I don't really get on with System.Threading.Timer . Its behaviour is to fire events on the threadpool, and it has no locking to prevent the events being fired concurrently - if your first handler hasn't completed, the thread pool will (if threads are available) run it again, concurrently, on another thread. I believe the timer resolution is the same as for System.Windows.Forms.Timer . Because it runs on the threadpool, it's unsafe to run any GUI code in the handler.
System.Timers.Timer is based on System.Threading.Timer . If you set the SynchronizingObject property, the callbacks are fired synchronously on the correct thread for that object, so the limitations above don't apply - it is safe to run GUI code, and callbacks cannot occur concurrently.
For the resolution you're after, you probably need a multimedia timer. This actually tweaks the system timer resolution. See this article[^] for a C# wrapper around the multimedia timer APIs. I haven't tried this code out, so I can't make any claims for it.
|
|
|
|