C Sharp: Difference between revisions
Created page with " ==Multithreading== ===Theadpool=== C# has a convenient [https://docs.microsoft.com/en-us/dotnet/api/system.threading.threadpool?view=netframework-4.8 TheadPool] class in th..." |
No edit summary |
||
(7 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
==Usage== | |||
===Regular Expressions=== | |||
Regex<br> | |||
[https://docs.microsoft.com/en-us/dotnet/api/system.text.regularexpressions.regex?view=netframework-4.8 Reference] | |||
<syntaxhighlight lang="csharp"> | |||
using System; | |||
using System.Text.RegularExpressions; | |||
public class Test | |||
{ | |||
public static void Main () | |||
{ | |||
// Define a regular expression for repeated words. | |||
Regex rx = new Regex(@"\b(?<word>\w+)\s+(\k<word>)\b"); | |||
// Define a test string. | |||
string text = "The the quick brown fox fox jumps over the lazy dog dog."; | |||
// Find match. | |||
Match match = rx.Match(text); | |||
// Iterature through captures | |||
foreach (Capture c in match.captures) { | |||
Console.WriteLine("Captured {c.Value}"); | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
==Multithreading== | ==Multithreading== | ||
Line 15: | Line 44: | ||
ManualResetEvent finishedHandle = new ManualResetEvent(false); | ManualResetEvent finishedHandle = new ManualResetEvent(false); | ||
for (int i = 0; i < numberOfTasks; i++) { | for (int i = 0; i < numberOfTasks; i++) { | ||
// Note that you cannot reuse i here. | |||
ThreadPool.QueueUserWorkItem(_ = > { | // You can use this trick to put it in a closure | ||
// Or you can make a closure manually with another anonymous function | |||
// i.e. (a => { return _=>{ \\ Do stuff here })(a) | |||
int j = i; | |||
ThreadPool.QueueUserWorkItem(_ => { | |||
try { | try { | ||
// Do something time consuming or resource intensive. | // Do something time consuming or resource intensive. | ||
// Do not use i here. You can use j instead. | |||
} catch (System.Exception e) { | } catch (System.Exception e) { | ||
// Print Stack Trace | // Print Stack Trace | ||
Line 28: | Line 62: | ||
}); | }); | ||
} | } | ||
// Blocking wait. | // Blocking wait. | ||
finishedHandle.WaitOne(); | finishedHandle.WaitOne(); | ||
Line 34: | Line 69: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==Platform Invoke== | |||
[https://docs.microsoft.com/en-us/dotnet/standard/native-interop/pinvoke Reference]<br> | |||
Platform Invoke (or P/Invoke) allows you to call and use C and C++ libraries from within your C# or other .NET programs. | |||
[[Category:Programming languages]] |
Latest revision as of 16:44, 31 January 2022
Usage
Regular Expressions
Regex
Reference
using System;
using System.Text.RegularExpressions;
public class Test
{
public static void Main ()
{
// Define a regular expression for repeated words.
Regex rx = new Regex(@"\b(?<word>\w+)\s+(\k<word>)\b");
// Define a test string. <br />
string text = "The the quick brown fox fox jumps over the lazy dog dog.";
<br />
// Find match.
Match match = rx.Match(text);
// Iterature through captures
foreach (Capture c in match.captures) {
Console.WriteLine("Captured {c.Value}");
}
}
}
Multithreading
Theadpool
C# has a convenient TheadPool class in the System.Threading namespace.
class TestClass {
static void Main(string[] args) {
int numberOfTasks = 10;
int tasksRemaining = 10;
// This is similar to a mutex.
ManualResetEvent finishedHandle = new ManualResetEvent(false);
for (int i = 0; i < numberOfTasks; i++) {
// Note that you cannot reuse i here.
// You can use this trick to put it in a closure
// Or you can make a closure manually with another anonymous function
// i.e. (a => { return _=>{ \\ Do stuff here })(a)
int j = i;
ThreadPool.QueueUserWorkItem(_ => {
try {
// Do something time consuming or resource intensive.
// Do not use i here. You can use j instead.
} catch (System.Exception e) {
// Print Stack Trace
} finally {
if (Interlocked.Decrement(ref tasksRemaining) == 0) {
finishedHandle.Set();
}
}
});
}
// Blocking wait.
finishedHandle.WaitOne();
}
}
Platform Invoke
Reference
Platform Invoke (or P/Invoke) allows you to call and use C and C++ libraries from within your C# or other .NET programs.