自动获取调用者的相关信息
System.Runtime.CompilerServices.CallerMemberName获取到调用者函数名称或者属性名称;
System.Runtime.CompilerServices.CallerFilePath获取到调用者文件路径;
System.Runtime.CompilerServices.CallerLineNumber获取调用者行列号;
public void TraceMessage(string message,
[CallerMemberName] string memberName = “”,
[CallerFilePath] string sourceFilePath = “”,
[CallerLineNumber] int sourceLineNumber = 0)
{
Trace.WriteLine("message: " + message);
Trace.WriteLine("member name: " + memberName);
Trace.WriteLine("source file path: " + sourceFilePath);
Trace.WriteLine("source line number: " + sourceLineNumber);
}
// Sample Output:
// message: Something happened.
// member name: DoProcessing
// source file path: c:\Users\username\Documents\Visual Studio 2012\Projects\CallerInfoCS\CallerInfoCS\Form1.cs
// source line number: 31
WPF绑定数据失败原因
Xmal中使用Ellipse.Fill到某一个属性时如此写程序
另外一个区别就是Converter,WPF中的Binding都是能够通过Converter来转换数据的,所以不管是TemplateBinding还是Binding都是够使用Converter来设置转换器,区别在于没有设置转换器的情况下,例如将int类型的数据绑定到TextBox的Text属性上,Binding会将值转换成字符串来显示,然而TemplateBinding就不会,这就是页码不能显示,也不会变化的原因。我立马弄了一个字符串类型页码依赖属性,TemplateBinding到这个Text属性上,可以工作了。但不会这么傻,再写一个转换器给TemplateBinding,这也是能够工作的。所以当数据源的类型和目标的类型不一致时,TemplateBinding需要自己写转换器来完成。
总结一下TemplateBinding与Binding区别
(1)TemplateBinding只是单方向的数据绑定
(2)TemplateBinding不会自动转换数据类型
#运动控制卡使用简略方法
以固高为例:
var rtn = mc.GTN_GetDi(_Config.CardID, mc.MC_HOME, out int ioOutValue);
if(rtn != ReturnCode.Success)
throw new Exception(“调用失败”)
可采用:
ApiInvoke(() => mc.GTN_GetDi(_Config.CardID, mc.MC_HOME, out intioOutValue),“GTN_GetDi command failed”);