小编Nas*_*adi的帖子

实现INotifyPropertyChanged - 是否存在更好的方法?

微软应该已经实现了一些有趣的东西INotifyPropertyChanged,就像在自动属性中一样,只需指定{get; set; notify;} 我认为这样做很有意义.或者有任何并发​​症吗?

我们自己可以在我们的属性中实现类似'notify'的内容.是否有一个优雅的解决方案,INotifyPropertyChanged在您的班级实施或唯一的方法是通过提高PropertyChanged每个属性中的事件.

如果没有,我们可以写一些东西来自动生成一段代码来引发PropertyChanged 事件吗?

.net c# inotifypropertychanged winforms

621
推荐指数
14
解决办法
29万
查看次数

将System.Array转换为List

昨晚我梦见以下是不可能的.但是在同一个梦里,来自SO的人告诉我.因此,我想知道是否可以转换System.ArrayList

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)

c#

256
推荐指数
7
解决办法
46万
查看次数

BackgroundWorker与后台线程

我有一个关于我应该在Windows窗体应用程序上使用的后台线程实现的选择的风格问题.目前我BackgroundWorker在一个具有无限(while(true))循环的表单上.在这个循环中,我WaitHandle.WaitAny用来保持线程打盹直到感兴趣的事情发生.我等待的一个事件句柄是一个" StopThread"事件,这样我就可以摆脱循环.来自我被覆盖的事件会发出此事件的信号Form.Dispose().

我读到的某个地方BackgroundWorker真的是用于那些你不想将UI绑定到并且具有有限结束的操作 - 比如下载文件或处理一系列项目.在这种情况下,"结束"是未知的,并且仅在窗口关闭时.因此,使用后台线程而不是BackgroundWorker为此目的更合适吗?

.net multithreading backgroundworker winforms

163
推荐指数
7
解决办法
11万
查看次数

一种将基类型转换为派生类型的方法

我不确定这是否是一件奇怪的事情,或者是否有一些代码闻起来...但我想知道是否有某种方式(某种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)

我知道这似乎很傻,但有没有办法完成这种事情?

c# oop inheritance design-patterns

45
推荐指数
7
解决办法
7万
查看次数

确保在MVVM WPF应用程序的UI线程上调用OnPropertyChanged()

在我正在使用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)

但这没用.有任何想法吗?

.net wpf multithreading mvvm

35
推荐指数
2
解决办法
3万
查看次数

ObservableCollection还监视集合中元素的更改

是否有一个具有以下特征的集合(BCL或其他):

如果更改集合则发送事件如果集合中的任何元素发送事件,则发送PropertyChanged事件.排序的ObservableCollection<T>位置T: INotifyPropertyChanged和集合也监视元素的变化.

我可以自己包装一个可观察的集合,并在添加/删除集合中的元素时进行事件订阅/取消订阅,但我只是想知道现有的集合是否已经这样做了?

c# collections

32
推荐指数
2
解决办法
3万
查看次数

如果实现在同一个程序集中,为什么部分方法不能公开?

根据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)

但为什么会这样呢?是否有某些原因编译器无法处理公共部分方法?

.net c# partial-classes

17
推荐指数
3
解决办法
5135
查看次数

部分类和访问修饰符问题

根据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)

访问修饰符是不同的,但它将编译.

我在这里错过了什么吗?

.net c# access-modifiers partial-classes

17
推荐指数
1
解决办法
1903
查看次数

由于线程退出或应用程序请求,I/O操作已中止

我的应用程序作为银行服务器的客户端应用程序.应用程序正在发送请求并从银行获得响应.这个应用程序通常工作正常,但有时

由于线程退出或应用程序请求,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

c# sockets exception

14
推荐指数
3
解决办法
7万
查看次数

可观察的集合属性已更改为集合中的项目

我有一个ObservableCollection<T>.我已将它绑定到ListBox控件,并且我已添加SortDescriptions到ListBox上的Items集合中,以使列表按我的方式排序.

当任何属性在子元素上发生更改时,我想在任何时候使用列表.

我所有的子元素都实现了INotifyPropertyChanged.

c# sorting collections wpf observablecollection

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