微软应该已经实现了一些有趣的东西INotifyPropertyChanged,就像在自动属性中一样,只需指定{get; set; notify;}
我认为这样做很有意义.或者有任何并发症吗?
我们自己可以在我们的属性中实现类似'notify'的内容.是否有一个优雅的解决方案,INotifyPropertyChanged在您的班级实施或唯一的方法是通过提高PropertyChanged每个属性中的事件.
如果没有,我们可以写一些东西来自动生成一段代码来引发PropertyChanged 事件吗?
昨晚我梦见以下是不可能的.但是在同一个梦里,来自SO的人告诉我.因此,我想知道是否可以转换System.Array为List
Array ints = Array.CreateInstance(typeof(int), 5);
ints.SetValue(10, 0);
ints.SetValue(20, 1);
ints.SetValue(10, 2);
ints.SetValue(34, 3);
ints.SetValue(113, 4);
Run Code Online (Sandbox Code Playgroud)
至
List<int> lst = ints.OfType<int>(); // not working
Run Code Online (Sandbox Code Playgroud) 我有一个关于我应该在Windows窗体应用程序上使用的后台线程实现的选择的风格问题.目前我BackgroundWorker在一个具有无限(while(true))循环的表单上.在这个循环中,我WaitHandle.WaitAny用来保持线程打盹直到感兴趣的事情发生.我等待的一个事件句柄是一个" StopThread"事件,这样我就可以摆脱循环.来自我被覆盖的事件会发出此事件的信号Form.Dispose().
我读到的某个地方BackgroundWorker真的是用于那些你不想将UI绑定到并且具有有限结束的操作 - 比如下载文件或处理一系列项目.在这种情况下,"结束"是未知的,并且仅在窗口关闭时.因此,使用后台线程而不是BackgroundWorker为此目的更合适吗?
我不确定这是否是一件奇怪的事情,或者是否有一些代码闻起来...但我想知道是否有某种方式(某种oop模式会很好)来"施放"基类型到其派生类型的形式.我知道这没有多大意义,因为派生类型将具有父级不提供的附加功能,这在其本身并非基本健全.但有没有办法做到这一点?这是一个代码示例,以便我可以更好地解释我在问什么.
public class SomeBaseClass {
public string GetBaseClassName {get;set;}
public bool BooleanEvaluator {get;set;}
}
public class SomeDerivedClass : SomeBaseClass {
public void Insert(SqlConnection connection) {
//...random connection stuff
cmd.Parameters["IsItTrue"].Value = this.BooleanEvalutar;
//...
}
}
public static void Main(object[] args) {
SomeBaseClass baseClass = new SomeBaseClass();
SomeDerivedClass derClass = (SomeDerivedClass)baseClass;
derClass.Insert(new sqlConnection());
}
Run Code Online (Sandbox Code Playgroud)
我知道这似乎很傻,但有没有办法完成这种事情?
在我正在使用MVVM模式编写的WPF应用程序中,我有一个后台进程可以做到这一点,但需要从UI获取状态更新.
我正在使用MVVM模式,因此我的ViewModel几乎不知道向用户呈现模型的视图(UI).
假设我的ViewModel中有以下方法:
public void backgroundWorker_ReportProgress(object sender, ReportProgressArgs e)
{
this.Messages.Add(e.Message);
OnPropertyChanged("Messages");
}
Run Code Online (Sandbox Code Playgroud)
在我看来,我有一个ListBox绑定到List<string>ViewModel 的Messages属性(a ). 通过调用a OnPropertyChanged来完成INotifyPropertyChanged接口的角色PropertyChangedEventHandler.
我需要确保OnPropertyChanged在UI线程上调用 - 我该怎么做?我尝试过以下方法:
public Dispatcher Dispatcher { get; set; }
public MyViewModel()
{
this.Dispatcher = Dispatcher.CurrentDispatcher;
}
Run Code Online (Sandbox Code Playgroud)
然后将以下内容添加到OnPropertyChanged方法中:
if (this.Dispatcher != Dispatcher.CurrentDispatcher)
{
this.Dispatcher.Invoke(DispatcherPriority.Normal, new ThreadStart(delegate
{
OnPropertyChanged(propertyName);
}));
return;
}
Run Code Online (Sandbox Code Playgroud)
但这没用.有任何想法吗?
是否有一个具有以下特征的集合(BCL或其他):
如果更改集合则发送事件如果集合中的任何元素发送事件,则发送PropertyChanged事件.排序的ObservableCollection<T>位置T: INotifyPropertyChanged和集合也监视元素的变化.
我可以自己包装一个可观察的集合,并在添加/删除集合中的元素时进行事件订阅/取消订阅,但我只是想知道现有的集合是否已经这样做了?
根据MSDN文档的部分类:
部分方法是隐式私有的
所以你可以拥有这个
// Definition in file1.cs
partial void Method1();
// Implementation in file2.cs
partial void Method1()
{
// method body
}
Run Code Online (Sandbox Code Playgroud)
但你不能拥有这个
// Definition in file1.cs
public partial void Method1();
// Implementation in file2.cs
public partial void Method1()
{
// method body
}
Run Code Online (Sandbox Code Playgroud)
但为什么会这样呢?是否有某些原因编译器无法处理公共部分方法?
根据MSDN文档的部分类:
所有部件必须具有相同的可访问性,例如public,private等.
但是如果您创建一个WindowsForm应用程序,您将在两个分部类中具有默认的Form类.
背后的代码:
public partial class Form1 : Form
{
...
}
Run Code Online (Sandbox Code Playgroud)
和设计师:
partial class Form1
{
...
}
Run Code Online (Sandbox Code Playgroud)
访问修饰符是不同的,但它将编译.
我在这里错过了什么吗?
我的应用程序作为银行服务器的客户端应用程序.应用程序正在发送请求并从银行获得响应.这个应用程序通常工作正常,但有时
由于线程退出或应用程序请求,I/O操作已中止
错误代码为995即将发生.
public void OnDataReceived(IAsyncResult asyn)
{
BLCommonFunctions.WriteLogger(0, "In :- OnDataReceived",
ref swReceivedLogWriter, strLogPath, 0);
try
{
SocketPacket theSockId = (SocketPacket)asyn.AsyncState;
int iRx = theSockId.thisSocket.EndReceive(asyn); //Here error is coming
string strHEX = BLCommonFunctions.ByteArrToHex(theSockId.dataBuffer);
}
}
Run Code Online (Sandbox Code Playgroud)
在相同的错误开始出现后,所有事务开始出现此错误,请帮助我解决此问题.如果可能,那么使用一些示例代码
此致,Ashish Khandelwal
我有一个ObservableCollection<T>.我已将它绑定到ListBox控件,并且我已添加SortDescriptions到ListBox上的Items集合中,以使列表按我的方式排序.
当任何属性在子元素上发生更改时,我想在任何时候使用列表.
我所有的子元素都实现了INotifyPropertyChanged.