javascript

java

python

c#

android

node.js

c++

reactjs

php

html

jquery

css

.net

ios

git

ruby-on-rails

sql

c

string

ruby

.net-使用IDisposable取消订阅事件

我有一个处理来自WinForms控件的事件的类。 根据用户的操作,我要延迟该类的一个实例,并创建一个新的实例来处理同一事件。 我需要先从事件中取消订阅旧实例-足够容易。 如果可能的话,我想以非专有的方式进行此操作,这似乎是IDisposable的工作。 但是,大多数文档仅在使用非托管资源时才建议使用IDisposable,但此处不适用。

如果我实现IDisposable并在Dispose()中取消订阅该事件,是否会改变其意图? 我应该改为提供Unsubscribe()函数并调用它吗?


编辑:这是一些伪代码,显示我在做什么(使用IDisposable)。 我的实际实现与某些专有数据绑定(长话短说)有关。

class EventListener : IDisposable
{
    private TextBox m_textBox;

    public EventListener(TextBox textBox)
    {
        m_textBox = textBox;
        textBox.TextChanged += new EventHandler(textBox_TextChanged);
    }

    void textBox_TextChanged(object sender, EventArgs e)
    {
        // do something
    }

    public void Dispose()
    {
        m_textBox.TextChanged -= new EventHandler(textBox_TextChanged);
    }
}

class MyClass
{
    EventListener m_eventListener = null;
    TextBox m_textBox = new TextBox();

    void SetEventListener()
    {
        if (m_eventListener != null) m_eventListener.Dispose();
        m_eventListener = new EventListener(m_textBox);
    }
}

在实际的代码中,更多地涉及“ EventListener”类,并且每个实例都是唯一的。 我在集合中使用它们,并在用户单击时创建/销毁它们。


结论

至少目前,我接受gbjbaanb的回答。 我觉得使用熟悉的界面的好处胜于不涉及任何非托管代码的使用它的任何弊端(该对象的用户怎么会知道呢?)。

如果有人不同意-请发表/评论/编辑。 如果可以对IDisposable提出更好的论据,那么我将更改接受的答案。

trans by 2020-02-29T11:46:34Z

.net-WPF中的自定义光标?

我想在WPF应用程序中使用图像或图标作为自定义光标。 最好的方法是什么?

trans by 2020-02-29T09:34:40Z

CodeGo.net>比较编译的。NET程序集?

有没有比较好的程序可以用来编译.NET程序集?

例如,我有HelloWorld.dll(1.0.0.0)和HelloWorld.dll(2.0.0.0),并且我想比较差异该怎么办?

我知道我可以使用.NET Reflector并使用Assembly Diff插件。 还有其他好的工具可以做到这一点吗?

trans by 2020-02-23T01:58:07Z

为什么同时有System.Net.Http和System.Web.Http命名空间?

当我研究.NET中可用的各种类库时,这只是一个简单的问题。 我注意到有System.Net.Http命名空间和System.Web.Http命名空间。

  • 这两个名称空间有什么作用?
  • 创建两个看似模棱两可的命名空间的动机是什么?
  • 我是否应该了解任何历史记录,或者其中一个名称空间“已弃用”?

System.Net.Http,System.Web.Http

trans by 2020-02-23T01:15:31Z

出现错误“拒绝访问路径”。 尝试将文件上传到Windows Server 2008 R2 Web时

我有一个asp.net Web应用程序,可将文件上传到Web服务器上的特定文件夹。 在本地,一切正常,但是当我将应用程序部署到Web服务器时,我开始出现错误“拒绝访问路径“ D:\ Attachments \ myfile.doc””。 我向“ IIS AppPool”用户提供了该应用程序在文件夹的完全权限下运行。 我什至给了“每个人”完整的权限,但是有同样的错误。

我将该文件夹添加到防病毒的“例外”列表中,但结果相同。 我开始怀疑Windows Server 2008 R2可能需要技巧才能使我的上传正常工作。 非常感谢您的帮助。

谢谢

trans by 2020-02-22T23:43:33Z

.net-C#递归深度-您可以深度到多深

是否有任何控件可以递归调用多少内容?

通过基本测试程序,我得到的递归深度刚好超过18k

这取决于堆栈大小。

有没有办法用大量堆栈设置一块内存(也许是一个线程)来增加递归深度?

trans by 2020-02-22T21:58:13Z

.net-您发现自己经常定期上课/上课的哪些名字?

您发现自己经常在课堂末尾放哪些名词?

例如,我习惯将FileHelper粘贴到传递信息但不做很多事情的类上:

  • FileHelper
  • FileHelper

或对于协调班:

  • FileHelper
  • FileHelper

我最终经常将FileHelper用于与字符串相关的类,即使它几乎不做任何构建:

  • FileHelper
  • FileHelper

当然,永恒的Helper / Utility类别:

  • FileHelper
  • FileHelper
  • FileHelper

您有什么好处,我的意思是简洁和描述性的名词或单词,您经常用它们来表示班级的主要角色?

该问题针对.NET世界,但可以扩展到Java,C ++,Python等。

trans by 2020-02-22T21:40:43Z

c#-比多个捕获块更优雅的异常处理?

这个问题已经在这里有了答案:

  • 一次捕获多个异常?                                     28个答案

使用C#,是否有比一堆丑陋的catch块更好的方法来处理多种类型的异常?

对于这种情况,什么是最佳实践?

例如:

try
{
    // Many types of exceptions can be thrown
}
catch (CustomException ce)
{
    ...
}
catch (AnotherCustomException ace)
{
    ...
}
catch (Exception ex)
{
    ...
}
trans by 2020-02-22T19:31:27Z

c#-NTFS备用数据流-.NET

如何从.NET创建/删除/读取/写入/ NTFS备用数据流?

如果没有本机.NET支持,我将使用哪个Win32 API? 另外,由于我认为没有记载,我将如何使用它们?

trans by 2020-02-22T17:53:52Z

CodeGo.net>如何设置一个文本框,以输入密码在WinForms?

如何设置用于在Winforms中输入密码的文本框? 如果打开Capslock,我也想显示“ Caps Lock is ON”弹出窗口。

我想要类似的东西

HTML中的<input type="password" />

trans by 2020-02-22T15:22:28Z

交叉LINQ查询

如果我有IEnumerable,则ClassA公开一个long类型的ID属性。是否可以使用Linq查询获取ID属于第二个IEnumerable的ClassA的所有实例?

换句话说,这可以做到吗?

IEnumerable<ClassA> = original.Intersect(idsToFind....)?

其中原始为IEnumerable<ClassA>,而idsToFind为IEnumerable<long>

trans by 2020-02-22T14:00:36Z

.net-为什么在Try ... Catch中使用Final

我看到在Try .. Catch中的Finally将始终在try catch块执行的任何部分之后执行。

跳过Finally部分并在try catch块之外运行之后再运行有什么不同?

示例1,尝试...捕获...最终...结束尝试

    Try
        'Do something
    Catch ex As Exception
        'Handle exception
    Finally
        'Do cleanup
    End Try

示例2,尝试...捕获...结束尝试...在外面做最后的事情

    Try
        'Do something
    Catch ex As Exception
        'Handle exception
    End Try
    'Do cleanup
trans by 2020-02-22T06:30:21Z

.net-如何将特定值传递给转换器参数?

我创建了一个类Person,看起来像这样:

public class Person
{
    public enum GenderType
    {
        Female, 
        Male
    }

    public string Name
    {
        get; set;
    }

    public GenderType? Gender
    {
        get; set;
    }
}

接下来,我创建了数据模板,该模板将显示Person类型的对象。
这是XAML代码:

<DataTemplate 
    x:Key="personTemplate" 
    DataType="{x:Type model:Person}">
  <StackPanel>
    <RadioButton 
        Content="Female" 
        IsChecked="{Binding Path=Gender, 
                    Converter={StaticResource genderConverter}, 
                    ConverterParameter=???}"/>
    <RadioButton 
        Content="Male" 
        IsChecked="{Binding Path=Gender, 
                    Converter={StaticResource genderConverter}, 
                    ConverterParameter=???}"/>
    <RadioButton 
        Content="Not specified" 
        IsChecked="{Binding Path=Gender, 
                    Converter={StaticResource genderConverter}, 
                    ConverterParameter=???}"/>
  </StackPanel>
</DataTemplate>

当然,代码中的Person.GenderType.Females无效:)问题是我想创建一个Person.GenderType.Male转换器,该转换器将给定值(即null)与参数中提供的给定Person.GenderType值进行比较,如果值匹配,则返回true

我不知道如何分别为第一个,第二个和第三个单选按钮传递转换器参数Person.GenderType.FemalePerson.GenderType.Malenull

trans by 2020-02-22T05:49:53Z

c#-Dictionary.FirstOrDefault()如何确定是否找到结果

我有(或想要拥有)这样的代码:

IDictionary<string,int> dict = new Dictionary<string,int>();
// ... Add some stuff to the dictionary.

// Try to find an entry by value (if multiple, don't care which one).
var entry = dict.FirstOrDefault(e => e.Value == 1);
if ( entry != null ) { 
   // ^^^ above gives a compile error:
   // Operator '!=' cannot be applied to operands of type 'System.Collections.Generic.KeyValuePair<string,int>' and '<null>'
}

我还尝试过这样更改违规行:

if ( entry != default(KeyValuePair<string,int>) ) 

但这还会产生一个编译错误:

Operator '!=' cannot be applied to operands of type 'System.Collections.Generic.KeyValuePair<string,int>' and 'System.Collections.Generic.KeyValuePair<string,int>'

这里有什么?

trans by 2020-02-22T05:44:38Z

C#-Reflection.Emit与CodeDOM

使用Reflection.Emit库与CodeDOM在运行时动态生成代码时,有哪些优缺点?

我试图基于XML格式的运行时可用元数据在系统中生成一些(相对复杂的)动态类。 我将生成用于扩展应用程序组装中现有类的类,实现其他接口,添加方法以及覆盖虚拟成员和抽象成员。

我想确保在我深入实施之前就选择了适当的技术。 关于这些不同的代码生成技术如何不同的任何信息都将有所帮助。 同样,有关简化或简化使用任一API的工作的开源库上的任何信息也将很有用。

trans by 2020-02-22T05:23:52Z

我应该什么时候等待我的异步?

我们目前正在重构项目的各个部分,以便上下同步,是的!

由于我们的理解不同,我和一位同事(我们叫他吉姆)对我们的异步/等待代码将如何执行以及编写方式有不同的看法。

这是Jim编写的示例方法:

public async Task<HouseModel> GetHouseModel(Guid houseId)
{
    House house = await _houseService.GetHouse(houseId);

    Task<IEnumerable<Furniture>> furniture = _furnitureService.GetFurnitureForHouse(house);

    Task<IEnumerable<Appliances>> appliances = _applianceService.GetAppliancesForHouse(house);

    return _houseModelFactory.MakeHouseModel(await furniture, await appliances);
}

还有我将如何编写的示例:

public async Task<HouseModel> GetHouseModel(Guid houseId)
{
    House house = await _houseService.GetHouse(houseId);

    IEnumerable<Furniture> furniture = await _furnitureService.GetFurnitureForHouse(house);

    IEnumerable<Appliances> appliances = await _applianceService.GetAppliancesForHouse(house);

    return _houseModelFactory.MakeHouseModel(furniture, appliances);
}

我的理解是:因为上述GetAppliancesForHouseGetFurnitureForHouse服务中的方法都需要House,所以它们将等待House可用才能继续。 然后,两种都需要运行House的方法都将运行,但是第二种方法(GetAppliancesForHouse)将不等待第一种方法完成后再开始。

Jim的理解是:只有在需要这两种方法时,我们才应该等待它们。 这样它们将彼此平行运行。 他认为以我的方式进行操作会导致第二种方法等待第一种方法,即:GetAppliancesForHouse等待GetFurnitureForHouse

这些理解中是否正确? 还是我们一直在进行弥补? 我们什么时候应该等待?

trans by 2020-02-22T04:34:08Z

CodeGo.net> WebClient的Unicode-哪个UTF8?

当我创建一个WebClient来使用一些RESTful xml时,我可以通过2种方式指定unicode编码:

WebClient wc = new WebClient ();
wc.Encoding = Encoding.UTF8;
wc.Encoding = UTF8Encoding.UTF8;

哪个正确/更好?

trans by 2020-02-22T04:31:34Z

如何使用WPF和.NET 3.5注册一个全局热键以说CTRL + SHIFT +(LETTER)?

我正在使用WPF在C#中构建应用程序。 如何绑定某些键?

另外,如何绑定Windows键?

trans by 2020-02-22T03:03:13Z

如何在.NET中使用XmlWriter创建XmlDocument?

许多.NET函数使用XmlWriter来输出/生成xml。 输出到文件/字符串/内存是非常简单的操作:

XmlWriter xw = XmlWriter.Create(PutYourStreamFileWriterEtcHere);
xw.WriteStartElement("root");
...

有时,您需要操纵生成的Xml,因此希望将其加载到XmlDocument中,或者由于其他原因可能需要XmlDocument,但是必须使用XmlWriter生成XML。 例如,如果您在第三方库中调用仅输出到XmlWriter的函数。

您可以做的一件事是将xml写入字符串,然后将其加载到XmlDocument中:

StringWriter S = new StringWriter();
XmlWriter xw = XmlWriter.Create(S);
/* write away */
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(S.ToString());

但这效率很低-首先将所有xml信息序列化为一个字符串,然后再次解析该字符串以创建DOM。

您如何指向XmlWriter直接构建XmlDocument?

trans by 2020-02-22T02:36:00Z

C#-实现ICloneable的正确方法

在类层次结构中实现Clone()的正确方法是什么? 假设我有一个抽象类DrawingObject。另一个抽象类RectangularObjectDrawingObject继承。然后有多个具体类,例如ShapeTextCircle等。所有具体类都从RectangularObject继承。我想在27578692750下实现275786927506194545,然后在27578692750上实现 ,在每个级别复制可用属性,并在下一个级别调用父级的Clone

但是,问题在于,由于前两个类是抽象的,因此无法在Clone()方法中创建它们的对象。 因此,我必须在每个具体类中复制属性复制过程。 或者,还有更好的方法?

trans by 2020-02-21T21:12:09Z

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 下一页 共122页