|
Good point, resolution of the Now property is in ms, and depends on the system. In Vista it seems to have a 1ms resolution, I just tested it:
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder(16384);
for (int i = 0; i < 10000; i++)
sb.AppendLine(String.Format("{0:HH:mm:ss.ffff}", DateTime.Now));
Console.WriteLine(sb.ToString());
Console.ReadLine();
}
System.Diagnostics.Stopwatch on the other hand is much more precise:
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder(16384);
Stopwatch sw = new Stopwatch(); sw.Start();
DateTime now = DateTime.Now;
for (int i = 0; i < 10000; i++)
sb.AppendLine(String.Format("{0:HH:mm:ss.fffff}", now + sw.Elapsed));
Console.WriteLine(sb.ToString());
Console.ReadLine();
}
|
|
|
|
|
Hey nice, stopwatch is new to me. We have some performance timers in the system I work on, but they use raw API calls via interop to do their stuff. Just tried your first example - the elapse is usually 15ms but sometimes 16ms, so on XP I guess the resolution is 15.something ms.
Regards,
Rob Philpott.
|
|
|
|
|
It all depends on the available hardware; you may want to look at the article "Timer surprises, and how to avoid them"[^] which predates .NET 2.0 and hence does not mention StopWatch (which is based on PerformanceCounters anyway).
|
|
|
|
|
You can create a new background thread with a manual reset event, waiting for a specified amount of seconds or an external Set.
int msToWait = 5000;
do {
manualStartEvent.WaitOne();
Stopwatch sw = new Stopwatch();
sw.Start();
bool externalSet = manualPauseEvent.WaitOne(msToWait);
sw.Stop();
int actualMsElapsed = sw.Elapsed.TotalMilliseconds;
if (externalSet)
{
msToWait -= actualMsElapsed;
if (msToWait < 0)
msToWait = 0;
}
else
{
msToWait = 0;
}
} while (msToWait > 0);
[EDIT] Code is posted only as an idea, you should take care of starting the thread, handling Stop situations and proper disposing all events.
modified on Thursday, April 9, 2009 8:39 AM
|
|
|
|
|
hmmm nice way...thanks
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L
%^]*IRXD#@GKCQ`R\^SF_WcHbORY87֦ʻ6ϣN8ȤBcRAV\Z^&SU~%CSWQ@#2
W_AD`EPABIKRDFVS)EVLQK)JKQUFK[M`UKs*$GwU#QDXBER@CBN%
R0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-iTV.C\y<pjxsg-b$f4ia>
-----------------------------------------------
128 bit encrypted signature, crack if you can
|
|
|
|
|
Hi All,
I am unable to deserialize the byte array to the object of structure on another machine,when i send it through TCP/IP by socket then there is no problem in serialization.,but problem occurs at the other side during deserialization.
It shows the error something like "unable to find assembly....."
I am using the following code....
private byte[] ObjectToByteArray(Object obj)
{
if (obj == null)
return null;
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
bf.Serialize(ms, obj);
return ms.ToArray();
}
// Convert a byte array to an Object
private Object ByteArrayToObject(byte[] arrBytes)
{
MemoryStream memStream = new MemoryStream(arrBytes);
BinaryFormatter binForm = new BinaryFormatter();
memStream.Position = 0;
//memStream.Write(arrBytes, 0, arrBytes.Length);
// memStream.Seek(0, SeekOrigin.Begin);
Object obj = (Object)binForm.Deserialize(memStream);
return obj;
}
Please help,it is urgent....
Regards
Lalit Narayan
|
|
|
|
|
That's telling you that it needs to know about the type (defined in an assembly you don't have loaded) in order to deserialise it. Make sure its in your project's references on the deserialisation side.
Regards,
Rob Philpott.
|
|
|
|
|
Hi Rob,
thanks for reply,
but i have not attached the assembly at my side because i have to only read the data that is coming through TCP channel from the controller.
Please reply...
Regards,
Lalit Narayan
|
|
|
|
|
What you have there is a method to convert an object to a byte array, and a method to convert a byte array to an object.
What you're transmitting is the member data of the object. All the methods and code for it isn't sent - that's defined in an assembly. You need to make sure that for any type which is sent this way, the assembly which contains it is on both client and server.
Find out which assembly the type you are serialising is in. Then make sure that assembly is referenced in the project dependencies of the deserialising project.
Regards,
Rob Philpott.
|
|
|
|
|
Hi Rob,
Thanks for ur reply..
Actually the problem is that we are communicating the DDC through windows service,on DDC side there is no .Net assembly but the embeded type of work over there(like C++ type).
Now if when we receive the byte array from DDC then i have to convert it into object of my own created structure same as DDC side.
But for testing purpose i am communicating between two computers that have .net application and windows service.But basically i have to set up communication between windows service and the DDC.
So i do not want to attach the assembly..because there will no assembly on other side in real time.
Please reply...
Regards,
Lalit Narayan
|
|
|
|
|
lnmca wrote: Now if when we receive the byte array from DDC then i have to convert it into object of my own created structure same as DDC side.
That's not good enough. When you call serialize, it packages up the fully qualified type name - that includes namespace, type name and assembly. When deserialising on the other side it will use all these things to create the type prior to populating it. Just because you have a type with the same name .NET will not use that.
I don't entirely understand what's you trying to do, but unless both sides are .NET you want to steer clear of Serialisation and just send the relevant fields one by one.
Regards,
Rob Philpott.
|
|
|
|
|
|
Hello,
has somebody a tutorial for UDP Hole Punching or STUN? I have a few problems with the UDP Punching and a few points which i don't understand, maybe somebody could help me:
Here an article to UDP Hole Punching: http://www.h-online.com/security/How-Skype-Co-get-round-firewalls--/features/82481[^]">
so, UDP Hole Punching works like this, you have 2 clients and one server which knows the IP-Adresses of the clients and their ports over which they would send their UDP Packages (so here's the first problem, from where does the server know, which ports the client use?)
first step: Client1 gets the IP-Adress and the Port (see above, here's the problem) of Client 2.
second step: CLient1 (IP: 1.1.1.1:1000) sends a package to Client 2 (IP: 2.2.2.2:???? Which port is it?) over UDP, which will be deleted on the NAT-Router of Client 2 (no incoming packages)
third step: Client 1 sends the server the information to initiiate a connection to Client 2 over the port 1000 (Client 1) and the Port ???? (Client 2).
fourth step: CLient 2 gets the information to create a udp-connection to CLient 1 (IP: 1.1.1.1:1000) over his Port ????.
Well, you see the principle is easy, but the Ports of CLient 2 are my big problem, how do i find that out? Has somebody experience in UDP Hole Punching or STUN? Well, what's STUN? I get from a STUN server only my Port, from which i sendet my package to the Server, but another client couldn't do anything with that port and thats the problem how to find out the port of my partner.
Many Thansk
|
|
|
|
|
Hi,
I am also trying to figure out the solution for the same problem.
Does anyone have the answer?
|
|
|
|
|
I guess, this is how it should be done
1. You get back your mapped port and mapped address from the STUN
2. CLient2 also gets back its mapped port and mapped address from the STUN
3. The STUN server should store these info. When either clients want to communicate with the other, it sends a request to the STUN server. The Stun server then sends a message to both the clients with the mapped Addr and port of their counterpart.
4. After this, hole punching can be done by the method shown in the article above.
|
|
|
|
|
Hi guys, i'm interesting at this. have you found some examples or howto?? How do you solve this problems??
|
|
|
|
|
Hi guys, i'm interesting at this. have you found some examples or howto?? How do you solve this problems??
PLEASE HELP ME
|
|
|
|
|
hi guys
if anybody found any solution regarding NAT traversal , please email me at : sanjudusad@gmail.com
Thanks in advance
|
|
|
|
|
hi everyone,
i want to know how can i minimize my program in the system try , in fact i want to know how can i create my program that when a user clicks on the minimize button program minimize in the system try (beside the system digital clock)?
I'm coding with C#.Net....tanx a lot
|
|
|
|
|
Add a NotifyIcon to your form. Subscribe to the form's Resize event, check it's state and if minimized, set Visible to false and the NotifyIcon's visibility to true. You'll need to add a context menu as well so your tray icon has funtionality but that's the basics.
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn) Visual Basic is not used by normal people so we're not covering it here. (Uncyclopedia) Why are you using VB6? Do you hate yourself? (Christian Graus)
|
|
|
|
|
You can use NotifyIcon to show icon in the system tray. To hide your form, call Hide() method.
|
|
|
|
|
And one more thing..
You need to set show in taskbar set to false;
|
|
|
|
|
Hello,
I have a problem which shouldn't be one really. I need to convert a program to a dll but when I compile it with csc I get an empty dll (checked with DumpBin.exe).
I created a small test class and compiled a dll from it but I cannot invoke the method using Dllimport, it says it cannot find an entrypoint named testMethod.
The code:
test.cs:
using System;
namespace test
{
public class test
{
public string testMethod()
{
return "test";
}
}
}
dllTest.cs:
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace dllTester
{
public class dllTester
{
[DllImport(@"test.dll", EntryPoint = "testMethod")]
static extern string testMethod();
static void Main(string[] args)
{
Console.WriteLine(testMethod());
Console.ReadKey();
}
}
}
I compile test.cs: csc /t:library /out:test.dll test.cs without any errors or warnings.
I compile dllTester: csc /out:dllTester.exe dllTester.cs without any errors or warnings.
When I try to run dllTester I get this:
Unhandled Exception: System.EntryPointNotFoundException: Unable to find an entry point named 'testMethod' in DLL 'test.dll'.<br />
at dllTest.dllTester.testMethod()<br />
at dllTest.dllTester.Main(String[] args)
Any ideas?
Br
Trih
|
|
|
|
|
Do you want to use a .NET Dll in a .NET Application, but using DllImport ??
|
|
|
|
|
As far as I know DllImport works with unmanaged assemblies, while your code produces a managed one.
|
|
|
|