以下行为是C#.NET中的某些功能还是错误?
测试应用:
using System;
using System.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Arguments:");
foreach (string arg in args)
{
Console.WriteLine(arg);
}
Console.WriteLine();
Console.WriteLine("Command Line:");
var clArgs = Environment.CommandLine.Split(' ');
foreach (string arg in clArgs.Skip(clArgs.Length - args.Length))
{
Console.WriteLine(arg);
}
Console.ReadKey();
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用命令行参数运行它:
a "b" "\\x\\" "\x\"
Run Code Online (Sandbox Code Playgroud)
在我收到的结果中:
Arguments:
a
b
\\x\
\x"
Command Line:
a
"b"
"\\x\\"
"\x\"
Run Code Online (Sandbox Code Playgroud)
传递给方法Main()的args中缺少反斜杠和未删除的引号.除手动解析外,正确的解决方法是什么Environment.CommandLine?
我在生产中收到一个异常,并在Mutex.ReleaseMutex()中使用以下代码中的"从非同步代码块调用了对象同步方法":
Mutex Mutex
{
get { return mutex ?? (mutex = new Mutex(false, mutexName)); }
}
[NonSerialized]
Mutex mutex;
public void Log(/*...*/)
{
Mutex.WaitOne();
try
{
/*...*/
}
finally
{
Mutex.ReleaseMutex();
}
}
Run Code Online (Sandbox Code Playgroud)
可能有多个进程可以使用具有不同和相同mutextName的互斥锁.而且我仍然不确定那个例外是如何发生的.