小编jpb*_*chi的帖子

C#中的内存泄漏

当您确保所有句柄,实现的东西IDispose都被丢弃时,在托管系统中是否有可能泄漏内存?

是否会出现遗漏某些变量的情况?

.net c# garbage-collection memory-leaks managed

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

WPF内置命令

我正在寻找内置WPF命令的完整列表.

到目前为止我找到的最好的列表就在这里,但它没有列出所有命令.

一些很好的细节将是:

  • 支持命令的控件/组件(例如,TextBox支持编辑命令,如粘贴,复制,剪切,重做和撤消);

  • 默认键手势和UI文本(可以从MSDN Library中提取).

.net wpf command

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

如何检测Console.In(stdin)是否已被重定向?

我想编写一个具有不同行为的控制台应用程序,具体取决于输入是来自键盘还是来自文件.

可能吗?在C#中最优雅的方法是什么?

c# console redirect stdin

25
推荐指数
2
解决办法
9484
查看次数

C#中的异常如何工作(幕后)

与" 如何在C++中实现异常(在幕后) "相同,但对于C#.

我知道抛出异常时必须执行以下步骤.

  1. 找到异常类型的最近处理程序;
  2. 将堆栈展开到处理程序级别;
  3. 调用处理程序;
  4. 查找并调用每个finally块.

.NET如何处理这些操作?"当前"处理程序的映射如何工作?try/catch块中发出了多少代码?在一个扔石块?

.net c# exception try-catch throw

19
推荐指数
2
解决办法
2525
查看次数

使用LINQ进行拓扑排序

我有一个具有部分订单关系的项目列表,i.e,该列表可以被认为是部分有序的集合.我想以与此问题相同的方式对此列表进行排序.正如那里正确回答的那样,这被称为拓扑排序.

有一个相当简单的已知算法来解决这个问题.我想要一个类似LINQ的实现.

我已经尝试使用OrderBy扩展方法,但我很确定它无法进行拓扑排序.问题是IComparer<TKey>界面无法表示部分订单.之所以会发生这种情况,是因为该Compare方法基本上可以返回3种值:,,意味着 分别等于,小于,然后大于.只有返回无关的方法才能实现有效的解决方案.

从我偏见的角度来看,我正在寻找的答案可能是由一个IPartialOrderComparer<T>接口和一个扩展方法组成的,如下所示:

public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(
    this IEnumerable<TSource> source,
    Func<TSource, TKey> keySelector,
    IPartialOrderComparer<TKey> comparer
);
Run Code Online (Sandbox Code Playgroud)

这将如何实施?IPartialOrderComparer<T>界面如何?你会推荐一种不同的方法吗?我很想看到它.也许有一种更好的方式来表示偏序,我不知道.

.net linq sorting partial-ordering topological-sort

17
推荐指数
2
解决办法
4294
查看次数

为什么Nullable <T>被认为是值类型?

您是否尝试过使用该Convert.ChangeType()方法将值转换为Nullable<T>类型?尴尬的是,它会抛出InvalidCastException一句话:"空对象无法转换为值类型".

尝试在您的即时窗口上运行此操作: ?System.Convert.ChangeType(null, typeof(int?))

出于某些不明原因,Nullables被认为是价值类型.例如,typeof(int?).IsValueType退货true.

对我来说,自从Nullable<T>接受以来null,它是类类型,而不是值类型.有谁知道为什么它会以不同的方式实施?

.net nullable

14
推荐指数
2
解决办法
2892
查看次数

为什么WPF Dispatcher.Invoke不传播异常?

这是我的假设例子.我有一个非常简单的WPF窗口,带有一个Button.Button.Click事件有一个像这样的处理程序.

Action doit = () =>
{
    Action error = () => { throw new InvalidOperationException("test"); };

    try {
        this.Dispatcher.Invoke(error, DispatcherPriority.Normal);
    } catch (Exception ex) {
        System.Diagnostics.Trace.WriteLine(ex);
        throw;
    }
};
doit.BeginInvoke(null, null);
Run Code Online (Sandbox Code Playgroud)

我希望通过Trace.WriteLine调用捕获并记下异常.相反,没有捕获异常并且应用程序中断.

有人知道可能的解释吗?为了捕获被调用的委托抛出的异常,您建议使用哪种解决方法Dispatcher.Invoke

更新1:我throw在异常处理代码中添加了一个.我不想实际忽略该异常.我的问题的重点是正确处理它.问题是永远不会执行异常处理代码.

请记住,这是一个假设的例子.我的真实代码看起来不像那样.另外,假设我无法更改要调用的方法中的代码.

更新2:考虑这个类似的例子.我有一个Windows窗体窗口而不是WPF窗口.它有一个按钮,几乎完全相同的处理程序.唯一的区别在于调用代码.它是这样的.

this.Invoke(error);
Run Code Online (Sandbox Code Playgroud)

在Windows窗体中,执行异常处理代码.为什么不同?

.net wpf exception-handling exception invoke

14
推荐指数
1
解决办法
5109
查看次数

重新打开ServiceHost时,WCF"CounterSet中已存在实例"错误

我有一个工作的ServiceHost,只有一个NetTcpBinding和一个端点.

.Close()呢 然后,我创建一个新的ServiceHost实例,其配置与第一个完全相同.然后,当我尝试.Open()新实例时,我遇到了这个非常尴尬的异常:

System.ArgumentException occurred
  Message=Instance 'LobbyService@net.tcp:||localhost:2718|game|' already exists in CounterSet 'e829b6db-21ab-453b-83c9-d980ec708edd'.
Parameter name: InstanceName
  Source=System.Core
  ParamName=InstanceName
  StackTrace:
       at System.Diagnostics.PerformanceData.CounterSetInstance..ctor(CounterSet counterSetDefined, String instanceName)
Run Code Online (Sandbox Code Playgroud)

以前有人见过吗?它是.NET Framework中的一个错误(顺便说一句,我使用的是4.0)?

关于我的ServiceHost可能相关的信息:

  • 首次关闭时,没有客户端连接到主机;
  • 自定义IInstanceProvider用于创建实例;
  • 绑定ReliableSession已打开;
  • 服务类型标有ServiceBehavior以下内容;

.

[ServiceBehavior(
IncludeExceptionDetailInFaults = true,
InstanceContextMode=InstanceContextMode.PerSession,
ConcurrencyMode=ConcurrencyMode.Reentrant,
UseSynchronizationContext = false
)]
Run Code Online (Sandbox Code Playgroud)

我愿意透露您可能想了解的有关该应用程序的任何额外信息.

更新1我编译了面向.NET 3.5的应用程序,但没有发生错误.不幸的是,我必须停用所依赖的所有东西Task.

更新2在Microsoft Connect上记录了有关此问题的错误.我想现在已经回答了这个问题.

.net wcf .net-4.0

12
推荐指数
2
解决办法
1890
查看次数

使用Raphael JS,使用带有偏移量的背景图像填充SVG元素

我希望这个这个Fill SVG元素带有带偏移的背景图像,但是使用Raphael JS.

使用没有偏移的背景图像显示矩形很容易.

canvas.rect(
    positionx, positiony, width, height
).attr(
    {fill: "url('/content/image_set.gif')"}
);
Run Code Online (Sandbox Code Playgroud)

上面的代码只显示图像的左上角.我想转移它并显示它的另一部分.我该怎么做?

html svg image background-image raphael

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

排序部分有序列表的最佳方法是什么?

可能最好用一个小例子来说明.
鉴于这种关系

A < B < C
A < P < Q 
Run Code Online (Sandbox Code Playgroud)

正确的产出将是

ABCPQ or APQBC or APBCQ ... etc.
Run Code Online (Sandbox Code Playgroud)

换句话说,任何排序都是有效的,其中给定的关系成立.

我最感兴趣的是最容易实现的解决方案,但速度和时间方面的最佳O(n)也很有趣.

language-agnostic sorting algorithm partial-ordering topological-sort

7
推荐指数
1
解决办法
2403
查看次数