在.NET中Process.GetProcessById,如果没有运行具有此ID的进程,则抛出异常.如何安全地调用此方法,以便它不会抛出异常?我在想类似的东西
if(Process.IsRunning(id)) return Process.GetProcessById(id);
else return null; //or do something else
Run Code Online (Sandbox Code Playgroud)
但是找不到任何检查ID的方法,除了可能获取所有正在运行的进程并检查列表中是否存在id.
例如,您希望可以使用文件路径和使用字符串以两种方式初始化对象.通常两者构造应该采取一个字符串参数,MyObject(string file)和MyObject(string content),但不可能超载这种方式.你有什么建议?
编辑:在第一种情况下,还需要文件路径,因此请不要建议读取文件内容的解决方案,只是将内容传递给其他构造函数.
例如
using(var something = GetSomething())
{
something.DoSomething();
if(something.IsX()) return true;
}
return false;
Run Code Online (Sandbox Code Playgroud) 在NotifyCollectionChangedEventArgs的事件args的文档中,有一个名为Replace 的操作(除了Add,Remove,Move等).什么时候可以解雇?我在ObservableCollection中看不到任何Replace方法
假设我有这个属性
public ISetting Setting { get; set; }
Run Code Online (Sandbox Code Playgroud)
如何在集合中获得断点?因此,当某些东西设置一个值时,程序会暂停.
我试着这样做
public IDatabaseConnectionSetting ConnectionSetting {
get;
set;
}
Run Code Online (Sandbox Code Playgroud)
并把断点放在set;线上,但它仍然不起作用.红色断点荧光笔突出显示整个属性声明
例如,双方System.Threading并System.Timers有类Timer.因此,如果我想System.Timers.Timer在一个使用的类中使用System.Threading,我必须使用类似的东西
System.Timers.Timer myTimer = new System.Timers.Timer();
Run Code Online (Sandbox Code Playgroud)
每次我想宣布/初始化计时器.有没有办法告诉编译器"每当我说Timer,System.Timers.Timer除非另有说明,否则使用?" 这样我就可以使用简单了
Timer t = new Timer();
Run Code Online (Sandbox Code Playgroud)
默认情况下System.Timers.Timer,除非我明确指定
System.Threading.Timer t2 = new System.Threading.Timer();
Run Code Online (Sandbox Code Playgroud) 在.NET应用程序中,通常以这种方式连接事件:
public event EventHandler<ChangeEventArgs> OnChange
{
add { _dependency.OnChange += value; }
remove { _dependency.OnChange -= value; }
}
Run Code Online (Sandbox Code Playgroud)
但是,这仅在有线事件具有相同事件处理程序时才有效.在我目前的情况下,原始事件args是库的专有,我不想将它暴露给客户端代码.所以我有一些适配器(ChangeEventArgs).如何使用上面的代码转换事件args?我想象下面的东西(但下面的代码不起作用)
public event EventHandler<ChangeEventArgs> OnChange
{
add { _dependency.OnChange += Convert(value); }
remove { _dependency.OnChange -= Convert(value); }
}
Run Code Online (Sandbox Code Playgroud)
要么
public event EventHandler<ChangeEventArgs> OnChange
{
add { _dependency.OnChange += value(this, Convert(args)); }
remove { _dependency.OnChange -= value(this, Convert(args)); }
}
Run Code Online (Sandbox Code Playgroud) 我IClientMessageInspector在我的应用程序中实现了"拦截"传出Web服务调用.是否有可能找出哪些操作正在从内部被称为BeforeSendRequest和AfterReceiveReply?
这里有一个类似的问题,如何在WCF消息检查器中获取调用的操作名称,该命令用于服务器端(接收请求的一方).我尝试做类似的事情,例如
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
var v = OperationContext.Current.OutgoingMessageProperties["HttpOperationName"];
return null;
}
public void AfterReceiveReply(ref Message reply, object correlationState)
{
var v = OperationContext.Current.OutgoingMessageProperties["HttpOperationName"];
}
Run Code Online (Sandbox Code Playgroud)
但在传出请求期间,似乎OperationContext.Current为null,所以我不能使用它.知道如何获得它吗?知道怎么干净利落(相反,解析SOAP xml)?
我需要编写代码来从我的应用程序发送陷阱(使用net-snmp API)任何人都有一个简单的示例代码来做到这一点?谢谢,吉尔
我了解使用Perfmon.msc您可以创建自定义性能计数器并使用计数器日志,您可以将计数器值写入文本文件.
我也理解我也可以通过使用创建性能计数器以编程方式使用它System.Diagnostics.PerformanceCounter,并使用NextValue()方法获取计数器值.是否有一种程序化的方法来告诉PerformanceCounter对象将日志写入文本文件(类似于Counter Log in perfmon.msc)?
c# ×9
.net ×8
breakpoints ×1
c ×1
collision ×1
constructor ×1
debugging ×1
events ×1
idisposable ×1
logging ×1
namespaces ×1
perfmon ×1
properties ×1
return ×1
snmp ×1
soap ×1
using ×1
wcf ×1