using System; using System.Threading; class Reset { [STAThread] static void Main() { ManualResetEvent manRE; manRE = new ManualResetEvent(true); bool state = manRE.WaitOne(1000, true); Console.WriteLine(state); manRE.Reset(); state = manRE.WaitOne(5000, true); Console.WriteLine(state); } }
Development Class
ManualResetEvent: Set
using System; using System.Threading; class ManualSet{ [STAThread] static void Main(string[] args) { ManualResetEvent manRE = new ManualResetEvent(false); bool state = manRE.WaitOne(5000, true); Console.WriteLine("ManualResetEvent After first WaitOne " + state); manRE.Set(); state = manRE.WaitOne(5000, true); Console.WriteLine("ManualResetEvent After second WaitOne " + state); } }
Macro in action
using System; class Class1{ static void Main(string[] args) { #if false Console.WriteLine("A"); #elif false Console.WriteLine("B"); #else Console.WriteLine("C"); #endif } }
Define macro for conditional compile
#define win2000 #define release #undef win98 using System; using System.Diagnostics; class Test { [Conditional("DEBUG")] public static void DumpState() { Console.WriteLine("Dump some state..."); } public static void Main() { string platformName; #if winXP // Compiling for Windows XP platformName = "Microsoft Windows XP"; #elif win2000 // Compiling for Windows 2000 platformName = "Microsoft Windows 2000"; #elif winNT // Compiling for Windows NT platformName = "Microsoft Windows NT"; #elif win98 // Compiling for Windows 98 platformName = "Microsoft Windows 98"; #else // Unknown platform specified platformName = "Unknown"; #endif Console.WriteLine(platformName); // Call the conditional DumpState method DumpState(); } }
#undef, #elif, and #else preprocessor directives
#define DEBUG
#undef DEBUG
#define PRODUCTION
class Test {
public static void Main() {
int total = 0;
int counter = 10;
myLabel:
System.Console.WriteLine(“counter = ” + counter);
if (counter < 5) {
#if DEBUG
System.Console.WriteLine("goto myLabel");
#elif PRODUCTION
System.Console.WriteLine("counter < 5");
#else
System.Console.WriteLine("goto myLabel, counter < 5");
#endif
goto myLabel;
}
System.Console.WriteLine("total = " + total);
}
}
[/csharp]
The use of the #define, #if, and #endif preprocessor directives
#define DEBUG
class Test
{
public static void Main()
{
int total = 0;
int counter = 0;
myLabel:
counter++;
total += counter;
System.Console.WriteLine(“counter = ” + counter);
if (counter < 5) {
#if DEBUG
System.Console.WriteLine("goto myLabel");
#endif
goto myLabel;
}
System.Console.WriteLine("total = " + total);
}
}
[/csharp]
Log utility based on File with File.AppendAllText
using System; using System.Collections.Generic; using System.Linq; using System.Text; public static class Logger { private static string logFile = @"logz.txt"; private static string errorLogFile = @"errorLogz.txt"; public static void Log(string s) { System.IO.File.AppendAllText(logFile, DateTime.Now + ": " + s + Environment.NewLine); } public static void LogError(string s) { System.IO.File.AppendAllText(errorLogFile, DateTime.Now + ": " + s + Environment.NewLine); } }