我有一个项目,它会抛出一些数据绑定错误.一个例子是:
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ItemsControl', AncestorLevel='1''. BindingExpression:Path=HorizontalContentAlignment; DataItem=null; target element is 'MenuItem' (Name=''); target property is 'HorizontalContentAlignment' (type 'HorizontalAlignment')
我的问题是,是否有办法确定实际声明此绑定的位置(无论是在XAML中还是在代码中声明).
到目前为止我尝试过的:
HorizontalContentAlignment
; 我发现只有一个并删除它但我仍然收到消息,这似乎表明那不是错误的...你知道有什么其他的技巧可以让WPF吐出一些更有用的信息,说明这个绑定的确切位置在哪里?
UPDATE
经过一点点搜索后,我很确定这是由某种风格应用于某种原因造成的MenuItem
.但是,我仍然无法确定声明错误绑定的位置.
更新2
我发现了这个问题.然而问题仍然存在,因为发现问题主要是基于错误消息中的有限信息在黑暗中搜索.
事实证明,绑定是以一种样式声明的.风格不在我的应用程序中.这可能是默认的风格MenuItem
.所以为了解决这个问题,我现在只需手动设置HorizontalContentAlignment
全部MenuItems
.错误的原因在某种程度上与操作顺序有关,因为这MenuItem
是在代码中生成的.我将分别发布一个新问题.
因此,就目前而言,故事的寓意是我觉得需要有一个更好的机制来确定故障绑定的声明位置.我希望看到类似绑定的堆栈跟踪...
如果有人知道确定在代码或标记中声明绑定的位置的任何其他工具或方法,我会将问题保持打开一段时间.
我发布了另一个关于应用于MenuItems
此处的样式/绑定的问题.
拥有rs
java.sql.ResultSet的一个实例,如何检查它是否包含一个名为"theColumn"的列?
目前" 避免检查空事件处理程序"是标题为C#隐藏功能的帖子的答案的顶部,它包含严重误导性信息.
虽然我理解Stack Overflow是一个"民主",并且答案因公众投票而上升到顶峰,我觉得很多投票给答案的人要么没有完全理解C#/ .NET或者没有花时间充分了解帖子中描述的做法的后果.
简而言之,该帖子主张使用以下构造来避免在调用事件时检查null.
public event EventHandler SomeEvent = delegate {};
// Later..
void DoSomething()
{
// Invoke SomeEvent without having to check for null reference
SomeEvent(this, EventArgs.Empty);
}
Run Code Online (Sandbox Code Playgroud)
乍一看,这似乎是一个聪明的捷径,但它可能是大型应用程序中一些严重问题的原因,特别是如果涉及并发性.
在调用事件的委托之前,您必须检查空引用.仅仅因为您使用空委托初始化事件并不意味着您的类的用户不会在某些时候将其设置为null并破坏您的代码.
像这样的东西是典型的:
void DoSomething()
{
if(SomeEvent != null)
SomeEvent(this, EventArgs.Empty);
}
Run Code Online (Sandbox Code Playgroud)
但即使在上面的例子中,也存在这样的可能性,即DoSomething()可能由一个线程运行,另一个可能会删除事件处理程序,并且可能会出现竞争条件.
假设这种情况:
Thread A. Thread B. ------------------------------------------------------------------------- 0: if(SomeEvent != null) 1: { // remove all handlers of SomeEvent 2: SomeEvent(this, EventArgs.Empty); 3: }
在引发事件的代码检查了委托以获取空引用之后,但在调用委托之前,线程B删除了SomeEvent事件的事件处理程序.当SomeEvent(this,EventArgs.Empty); 调用,SomeEvent为null并引发异常.
为了避免这种情况,提出事件的更好模式是:
void DoSomething()
{
EventHandler handler …
Run Code Online (Sandbox Code Playgroud) 最近我为我编写的一个软件添加了一些负载均衡功能.它是一个联网的应用程序,它根据来自SQL数据库的输入执行一些数据处理.由于压缩可能非常密集,我已经添加了在不同服务器上运行此应用程序的多个实例以分割负载的功能,但现在负载平衡是一种手动操作.用户必须指定哪些实例占用输入域的哪个部分.
我想把它提升到一个新的水平,并对实例进行编程,以自动协商输入数据的潜水,并识别其中一个"消失"(已经崩溃或已经断电),以便其余的实例可以采取在失败的实例的工作量上.
为了实现这一点,我正在考虑在实例之间使用简单的心跳协议来确定谁在线以及谁不在线,虽然这不是非常复杂但我想知道是否有任何已建立的心跳网络协议(基于UDP,TCP或两者兼而有之).
显然,在集群,故障转移和高可用性技术的网络世界中,这种情况发生了很多,所以我想最后我想知道是否有任何已建立的协议或算法,我应该知道或实现.
编辑
根据答案,似乎没有完善的心跳协议或没有人知道它们(这意味着它们毕竟不是那么完善)在这种情况下我只是要滚动我自己的.
虽然没有一个答案提供了我特别想要的东西,但我会投票支持Matt Davis的答案,因为它是最接近的,他指出了使用多播的好主意.
谢谢大家的时间〜
sockets network-programming network-protocols distributed-computing
在ProtoBuf-Net实现中,ProtoInclude属性意味着什么,它有什么作用?
一个例子将不胜感激.
[Serializable,
ProtoContract,
ProtoInclude(50, typeof(BeginRequest))]
abstract internal class BaseMessage
{
[ProtoMember(1)]
abstract public UInt16 messageType { get; }
}
[Serializable,
ProtoContract]
internal class BeginRequest : BaseMessage
{
[ProtoMember(1)]
public override UInt16 messageType
{
get { return 1; }
}
}
Run Code Online (Sandbox Code Playgroud)
另外,有没有办法使用protogen工具生成这种继承?
我需要获取运行我的应用程序的路径(不是可执行文件):
System.AppDomain.CurrentDomain.BaseDirectory()
Run Code Online (Sandbox Code Playgroud)
当我在我的本地机器上使用&"/images/image.jpg"运行上述语句时,它运行正常,但是当我在另一台机器上安装该应用程序时,它说它无法找到该文件,并且有一些额外的路径信息.
我只需要运行应用程序的目录.我使用Visual Studio 2008在VB.NET中编码.
谢谢!
基本上我想知道iPhone和iPod Touch的兼容性.我想知道我是否可以购买iPod Touch(从而节省一些现金)并在其上开发iPhone应用程序,或者我是否真的应该花费额外的钱并忍受AT&T并获得iPhone.
这两个设备之间究竟有什么不同(除了iPod Touch中缺少的手机部分).
有人做过这个吗?或者我是否因为思考而疯狂?
编辑
我在文中更正了对iPod Touch的引用,以便@ person-b不会扼杀我..
此外,我想确保我指出我在iPod Touch上开发iPhone应用程序的可行性真的很有趣.
我正在寻找为我创建的类添加一些灵活性,该类建立与远程主机的连接,然后执行信息交换(握手).当前实现提供了一个Connect函数,该函数建立连接,然后阻止等待ManualResetEvent,直到双方完成握手.
以下是调用我的类的示例:
// create a new client instance
ClientClass cc = new ClientClass("address of host");
bool success = cc.Connect(); // will block here until the
// handshake is complete
if(success)
{
}
Run Code Online (Sandbox Code Playgroud)
..这里是一个过分简化的高级视图,了解该类在内部的作用:
class ClientClass
{
string _hostAddress;
ManualResetEvent _hanshakeCompleted;
bool _connectionSuccess;
public ClientClass(string hostAddress)
{
_hostAddress = hostAddress;
}
public bool Connect()
{
_hanshakeCompleted = new ManualResetEvent(false);
_connectionSuccess = false;
// start an asynchronous operation to connect
// ...
// ...
// then wait here for the connection and …
Run Code Online (Sandbox Code Playgroud) .net ×4
c# ×2
asynchronous ×1
cocoa-touch ×1
data-binding ×1
delegates ×1
events ×1
executable ×1
iasyncresult ×1
iphone ×1
ipod ×1
ipod-touch ×1
java ×1
jdbc ×1
math ×1
protobuf-net ×1
resultset ×1
sockets ×1
symbols ×1
vb.net ×1
wpf ×1