小编Dav*_*ave的帖子

使用LINQ创建一个IEnumerable <>的delta值

我有一个时间戳列表(以刻度表示),从这个列表中我想创建另一个表示条目之间的增量时间的列表.

我们只是说,例如,我的主时间表如下所示:

  1. 10
  2. 20
  3. 三十
  4. 50
  5. 60
  6. 70

我想要的是这个:

  1. 10
  2. 10
  3. 20
  4. 10
  5. 10

我在这里要完成的是通过计算标准偏差来检测输出表中的#3是异常值.我以前没有统计过,但我想如果我在输出列表中查找流行值并丢弃1 sigma之外的任何内容,这对我来说就足够了.

我希望能够使用单个LINQ查询创建输出列表,但我还没有想出来.目前我只是通过循环强制它.

c# linq statistics .net-3.5

12
推荐指数
1
解决办法
2397
查看次数

如何找出谁拥有我的应用程序退出时仍在运行的工作线程?

升级到VS2010后不久,我的应用程序就不会干净地关闭.如果我关闭应用程序然后在IDE中点击暂停,我会看到:

替代文字

问题是,没有背景.调用堆栈只是说[外部代码],这没有太大帮助.

这是我到目前为止试图缩小问题的方法:

  • 删除所有无关的插件以最小化启动的工作线程数
  • 在我创建工作线程的任何地方设置断点(和委托+ BeginInvoke,因为我认为它们在调试器中被标记为"工作线程").没有人被击中.
  • 为所有线程设置IsBackground = true

虽然我可以执行下一个强力步骤,即将代码转回到发生这种情况的点,然后查看所有更改日志,但这并不是非常有效.鉴于调试器显示缺乏信息,任何人都可以推荐更好的方法来解决这个问题吗?

我能想到的唯一其他事情包括:

  • 阅读WinDbg并尝试在线程启动时使用它来停止.至少,我认为这是可能的...... :)
  • 注释掉大量代码,直到应用程序正常关闭,然后开始取消注释,直到它没有.

UPDATE

也许这些信息会有用.我决定使用WinDbg并附加到我的应用程序.然后我关闭它,并切换到线程0并转储堆栈内容.这就是我所拥有的:

ThreadCount:      6
UnstartedThread:  0
BackgroundThread: 1
PendingThread:    0
DeadThread:       4
Hosted Runtime:   no
                                   PreEmptive   GC Alloc                Lock
       ID  OSID ThreadOBJ    State GC           Context       Domain   Count APT Exception
   0    1  1c70 005a65c8      6020 Enabled  02dac6e0:02dad7f8 005a03c0     0 STA
   2    2  1b20 005b1980      b220 Enabled  00000000:00000000 005a03c0     0 MTA (Finalizer)
XXXX    3       08504048     19820 Enabled  00000000:00000000 005a03c0     0 Ukn
XXXX    4       08504540     19820 Enabled …
Run Code Online (Sandbox Code Playgroud)

c# wpf multithreading .net-4.0 visual-studio-2010

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

SQLite是否支持跨多个数据库的事务?

我已经做了一些搜索,也阅读了SQLite网站上的常见问题解答,没有运气找到我的问题的答案.

很可能我的数据库方法存在缺陷,但目前,我想将我的数据存储在多个SQLite3数据库中,这意味着单独的文件.我非常担心由于我的应用程序可能崩溃导致的数据损坏,或者在我的表中更改数据时停电.

为了确保数据完整性,我基本上需要这样做:

在数据库#1中启动事务修改表#1修改数据库#2提交中的表,如果错误则回滚

这是否得到了SQLite的支持?另外,我使用的是sqlite.net,特别是基于SQLite 3.6.23.1的最新版本.

UPDATE

还有一个问题 - 这是人们通常会在单元测试中添加的内容吗?我总是单元测试数据库,但从来没有像这样的情况.如果是这样,你会怎么做?这几乎就像你必须将另一个参数传递给方法,如bool test_transaction,如果是真的,则在数据库访问之间抛出异常.然后在调用后进行测试,以确保第一组数据没有进入其他数据库.但也许这是可以被SQLite的测试覆盖了东西,应该不会出现在我的测试案例.

database sqlite transactions system.data.sqlite

10
推荐指数
1
解决办法
4820
查看次数

为透明的点击覆盖寻找一个好的WPF解决方案

我想尝试不同的东西,并试图在我当前的WPF GUI上显示一个叠加层,允许用户仍然与GUI进行交互,但是提供了一层烦恼让他们知道某些事情已经发生了.

我的问题实际上是两个不同的问题:

1.你会怎么做叠加?

我的第一次尝试是使用矩形,将填充设置为适当的颜色,然后更改不透明度.但点击率并不透明.所以我认为根据搜索结果,我想要做的是创建一个单独的窗口,将其Background设置为Transparent,然后将allowsTransparency设置为True.虽然这有效,但如果我想做点什么Background="DarkRed" Opacity="0.2",点击率就不再适用了.

这导致我进入第二部分:

2.如果我正在使用MVVM,那么调整此叠加区域的正确方法是什么?

我的主窗口创建了ViewModel,它创建了Model.模型是唯一知道是否应该显示叠加层的东西.但主窗口显然是唯一知道其大小的东西,而模型从不知道它上面的任何东西.实现此目的的唯一方法是将覆盖窗口的大小数据绑定到ViewModel中的属性,然后让ViewModel在主窗口大小发生变化时设置这些值吗?

任何人都有关于如何实现所有这些事情的线索?

c# wpf mvvm .net-3.5

10
推荐指数
1
解决办法
6313
查看次数

ListView + MultipleSelect + MVVM =?

如果我说"哎呀!",我可以给我的ListView和SelectionMode ="Multiple"这个名字,并且能够很容易地获得所有选定的项目.但我试图尽可能地坚持MVVM,我想以某种方式数据绑定到一个ObservableCollection,它保存每个选定项的Name列的值.你是怎么做到这一点的?单选很简单,但对于我目前的WPF/MVVM知识,多选解决方案并不明显.

在SO上阅读了这个问题,虽然它确实给了我一些很好的见解,但我不知道如何在行中添加必要的绑定,因为我使用的是带有GridView的ListView作为View,而不是ListBox.

这是我的XAML基本上看起来像:

<ListView DockPanel.Dock="Top" ItemsSource="{Binding ClientPreview}" SelectionMode="Multiple">
    <ListView.View>
        <GridView AllowsColumnReorder="False">
            <GridViewColumn Header="Name">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Path=Name}" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn Header="Address">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Path=Address}" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>
Run Code Online (Sandbox Code Playgroud)

听起来正确的做法是将每行的IsSelected属性数据绑定到存储在我正在数据绑定的ObservableCollection中的每个对象.我还没弄明白怎么做.

c# wpf listview gridview mvvm

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

找到不是直接来自我的代码的托管异常的来源?

如果这真的是一个超级用户问题我提前道歉...我只是不确定,但这似乎更多的开发.一边而不是技术支持方面.:)

这不一定是个问题,但它确实让我在我的系统上完全疯狂.它也只发生在我的电脑上.

当我启动任何应用程序,甚至是空白的WPF应用程序时,我看到四个例外:

PresentationCore.dll中出现类型'System.IO.DirectoryNotFoundException'
的第一次机会异常mscorlib.dll中出现类型'System.ArgumentException'
的第一次机会异常mscorlib.dll中出现类型'System.ArgumentException' 的第一次机会异常
PresentationCore.dll中出现"System.InvalidOperationException"类型的第一次机会异常

为了弄清楚它们来自何处,我然后设置VS2008以打破任何抛出的CLR异常,这里是信息:

例外#1:
找不到路径'D:\ Dell\Reader2.0\SPLASH.SYS\fonts\AscenderUni.ttf'的一部分.

例外#2:
不支持文化名称'ug'.
参数名称:名称

例外#3:
不支持文化名称'ug'.
参数名称:名称

例外#4:
IetfLanguageTag'ug'没有注册的CultureInfo.

我通过Process Monitor和Process Explorer戳了戳.Process Monitor显示我的应用程序正在执行RegQueryValue,我当然不负责......但是某些DLL(可能来自Dell crapware)正在被我的进程加载并正在读取此regkey.然后我查看了Process Explorer,希望看到我的应用程序正在加载哪些DLL,但无法找到该信息.然后我尝试了PrcView并看到了我的应用程序正在加载的模块.

我很惊讶地看到有多少其他模块被加载,但我没有看到戴尔相关的任何东西.我也想知道如何将Norton Internet Security DLL加载到我的进程中,但我认为这是有意的,Norton会采取一些特殊措施来确保进程的安全性.

我还能做些什么来识别和删除这些异常的来源?

UPDATE

不确定这是否让我感到困惑.这个异常是在我的应用程序由于某种原因加载的DLL中引发的(我没有从我的项目中引用与Dell相关的任何内容).我现在已经卸载了那个应用程序,我仍然得到了愚蠢的例外.这一切在技术上都很好,因为异常是在某个地方处理的,可能是在那个DLL中,但是我只是因为运行我的应用程序时弹出了四条额外的消息(实际上是8,因为我必须关闭每个异常的两个对话框).叫我懒惰,但我从来没有问过这个该死的DLL首先加载.:)

也许现在是时候使用msconfig开始禁用某些戴尔服务了.我实际上有空闲时间后会玩这个.

c# exception

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

使用doxygen为带有XML注释的现有C#代码创建文档

到处都读过doxygen是为C#代码生成文档的方法.我有一个我想要首先记录的界面(婴儿步骤),它已经有XML注释(///).

由于有大量的帖子和信息(包括doxygen.org)说这些评论已经得到支持,我很惊讶当我运行doxywizard时,我收到的错误如"警告:复合公司::产品:: MyInterface是没有记录".

这让我相信我在某种程度上误解了XML文档(希望不是,根据MSDN,我说的是正确的事情),或者我错误配置了doxywizard.

我首先通过向导选项卡运行doxywizard,并指定我想支持C#/ Java.当我运行它时,我的HTML页面是空白的,大概是因为前面提到过的警告.然后我尝试通过专家选项卡指定单个文件并再次运行 - 相同的行为.

任何人都可以告诉我什么开关或设置我缺少得到doxygen来生成HTML?

以下是我的界面中记录的属性/方法的示例:

/// <summary>
/// Retrieve the version of the device
/// </summary>
String Version { get; }

/// <summary>
/// Does something cool or really cool
/// </summary>
/// <param name="thing">0 = something cool, 1 = something really cool</param>
void DoSomething( Int32 thing);
Run Code Online (Sandbox Code Playgroud)

我在界面上面有一条评论,如下所示:

/// <summary>
/// MyInterface
/// </summary>
public interface MyInterface {...}
Run Code Online (Sandbox Code Playgroud)

c# documentation doxygen xml-documentation

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

MEF =可能会遇到挫折感?

UPDATE

因为我试图在我的应用程序中使MEF工作,所以我遇到了更多的地方我不知道为什么它不会在我预期的时候自动创建我的库.我想这一切都回到了里德所说的关于需要MEF来创造一切的东西.所以现在,我有一个需要使用我的CandySettings的XML阅读器类,但即使它的ICandySettings属性具有[Import]属性,它也不会被导入.首先我发现[导入]不适用于静力学,所以我改变了这一点.但在那之后它仍然没有奏效.我认为这是因为我手动创建XML阅读器对象,而MEF要我做的是[导入] XML阅读器...这意味着我现在必须有一个接口.

这几乎就像使用IoC(至少对于MEF),这是一个全有或全无的事情.你不能随便随意使用它,因为最终你想要注入属性的类也需要由MEF创建.

如果我错了请纠正我!


原帖

嗯,这还不错.:)但是在Reed指出MEF作为IoC的潜在替代品之后我确实有问题(到目前为止看起来确实很不错).

请考虑以下模型: alt text http://bit.ly/9W0sHt

正如你所看到的,我有一个应用程序,这个应用程序使用插件(哎呀,错过了那个协会!).App和Plugins都需要使用CandySettings类型的对象,这可以在另一个程序集中找到.

我首先尝试在MEF中使用ComposeParts方法,但是我能让它工作的唯一方法是在插件代码中执行类似的操作.

var container = new CompositionContainer();
container.ComposeParts(this, new CandySettings());
Run Code Online (Sandbox Code Playgroud)

但这没有任何意义,因为我为什么要在插件中创建CandySettings的实例?它应该在App中.但是如果我把它放在App代码中,那么插件并没有神奇地弄清楚如何获得ICandySettings,即使我在插件中使用[Import],而在CandySettings中使用[Export]. 编辑(可能是因为我应该从应用程序调用ComposeParts()然后传递它的插件?)

我做的方式,它是使用MEF的DirectoryCatalog,因为这允许插件,建造时,扫描所有组件在当前文件夹,并自动导入标有[导入]属性的一切.所以它看起来像这样,并且可能在每个插件中:

var catalog = new DirectoryCatalog(".");
var container = new CompositionContainer(catalog);
container.ComposeParts(this);
Run Code Online (Sandbox Code Playgroud)

这完全有效,但我不禁想到这不是MEF的用途吗?

c# dependency-injection mef ioc-container inversion-of-control

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

即使处理异常IS,在VS2010调试器中获取未处理的异常

我有一个VS2010的问题,调试器停止时出现Unhandled Exception.但是,例外肯定是处理的.事实上,如果我把代码放在catch块中,当我按下F5时我会点击它.在Debug - > Exceptions中,我绝对没有选中"Thrown"复选框,因此IMO绝对没有理由弹出未处理的异常对话框...

我无法发布确切的代码,但很快就可以处理样本了.违规代码部分背后的基本思想是我有一个与硬件对话的线程,如果我有一个错误与它交谈,那么我抛出一个HardwareException.线程启动BeginInvoke时,我调用时会在回调处理程序中捕获异常EndInvoke.

当在调试器中抛出异常时,我得到一个消息框,上面写着"硬件异常不由用户代码处理".但它是!!!

编辑 - 嗯,这让我发疯了.我有示例代码,代表我在我的应用程序中的代码,它看起来像这样:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Remoting.Messaging;
using System.Threading;

namespace ConsoleApplication1
{
    public class HardwareException : ApplicationException
    {
        public HardwareException( string message) : base(message) {}
    }

    class Program
    {
        delegate void HardwareTestDelegate();

        static void Main(string[] args)
        {
            HardwareTestDelegate d = new HardwareTestDelegate( HardwareTestThread);
            d.BeginInvoke( HardwareTestComplete, null);
            while( true);
        }

        static void HardwareTestThread()
        {
            throw new HardwareException( "this is a …
Run Code Online (Sandbox Code Playgroud)

debugging visual-studio-2010 unhandled-exception

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

使用Vim将所有*非*匹配的字符串替换为另一个字符串

解析日志文件时,我经常使用:g!/<string I want to keep in the log>/d从日志中删除不包含感兴趣字符串的所有行.好吧,现在我想使用这个强大的命令来替换所有与空行不匹配的字符串.

:g!除了我已经使用的命令之外,我几乎找不到任何信息,格式是:g!/<match string>/<cmd>,cmd"ex命令",或者vim中使用的命令之一.

所以我认为可以使用s命令来做到这一点,但我的理解在这方面是有限的.任何人都可以建议如何正确格式化命令?还是有其他工具更适合这项任务吗?(sed/awk?我还没有真正使用过那些,但知道它们非常强大).

另一种选择是在Python中使用Python来编写实用程序.

regex vim search replace

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