小编Ala*_*lan的帖子

Socket服务器,SocketAsyncEventArgs和.Net中的并发连接

我一直在编写一个基于CodeProject的套接字服务器,它本身来自原始的Microsoft示例.

在这两种情况下,使用相同的SocketAsyncEventArgs立即将入站消息返回给发件人.就我而言,我需要关闭入站消息,以便在回复客户端之前进行进一步的异步处理.

问题是返回的响应可能会尝试同时使用相同的SocketAsyncEventArgs作为来自客户端的进一步消息.发生这种情况时,我得到以下异常:

"An asynchronous socket operation is already in progress using this SocketAsyncEventArgs instance"

所以,(我相信)我需要一个单独的SocketAsyncEventArgs池来传回消息.到目前为止都可以理解.

我的问题是,我不确定如何创建出站SocketAsyncEventArgs,因为它与入站密切相关.

我可以重复使用多少入站数据?例如,如果我只指向同一个AcceptSocket,那么当消息同时向两个方向传播时会有麻烦吗?

有没有人有一些示例代码如何从入站的SocketAsyncEventArgs派生出来?或者我错过了这一点?

.net sockets tcp

11
推荐指数
1
解决办法
1995
查看次数

C#,WPF,MVVM和INotifyPropertyChanged

我感到困惑; 我以为我理解了INotifyPropertyChanged.

我有一个小的WPF应用程序,前端是MainWindow类,中间有一个视图模型,后面有一个模型.

我的模型是模拟器类.

SimulatorViewModel几乎是透明的,只是MainWindow和Simulator之间的接口属性.

Simulator实现了INotifyPropertyChanged,Simulator中的每个属性setter都调用了RaisePropertyChanged方法:

private string serialNumber;
public string SerialNumber
{
    get { return serialNumber; }
    set
    {
        serialNumber = value;
        RaisePropertyChanged("SerialNumber");
    }
}

public event PropertyChangedEventHandler PropertyChanged;

public void RaisePropertyChanged(string propName)  
{  
    if (this.PropertyChanged != null)  
    {  
        this.PropertyChanged(this, new PropertyChangedEventArgs(propName));  
    }  
}    
Run Code Online (Sandbox Code Playgroud)

在xaml中,我有一个带有这样绑定的TextBox:

Text="{Binding Path=SerialNumber, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Run Code Online (Sandbox Code Playgroud)

并且DataContext是SimulatorViewModel(但是请参阅我关于将DataContext更改为模型的注释)

ViewModel只传递属性:

public string SerialNumber  
{  
    get { return Simulator.SerialNumber; }  
    set { Simulator.SerialNumber = value; }  
}  
Run Code Online (Sandbox Code Playgroud)

Simulator中属性SerialNumber的编程更新不会传播到UI,但奇怪的是,在Simulator构造函数中设置的初始值正在到达那里.

如果我在模拟器中断开SerialNumber setter并进入RaisePropertyChanged,我发现PropertyChanged为null,因此事件不会向上传播到GUI.

这引出了几个问题:

  1. 究竟应该挂进PropertyChanged事件?我希望比"WPF"更具体.该事件与xaml中的Binding语句之间的联系是什么?

  2. 为什么初始属性值在启动时会到达UI,但后来却没有?

  3. 我是否有权使用模拟器(模型)实现INotifyPropertyChanged,或者它应该是ViewModel吗?如果ViewModel这样做,那么模型中的程序化更改不会触发PropertyChanged,所以我不清楚正确的模式.我意识到我的ViewModel实际上是多余的,但这是由于项目的简单性; 更复杂的一个会使ViewModel概念更加努力.我的理解是ViewModel是我的单元测试接口的地方.

c# wpf mvvm inotifypropertychanged

9
推荐指数
1
解决办法
1万
查看次数

标签 统计

.net ×1

c# ×1

inotifypropertychanged ×1

mvvm ×1

sockets ×1

tcp ×1

wpf ×1