小编Bab*_*oey的帖子

问:事件循环开始时是否有通知?

我有一个Qt应用程序与这种main()...

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MainWindow   mainWin;

    ... A separate, non-GUI thread is launched here

    mainWin.Init();
    mainWin.show();

    app.exec();
}
Run Code Online (Sandbox Code Playgroud)

在mainWin需要知道何时可以开始与mainWin通信之前创建的另一个线程.但由于mainWin使用Qt信号,插槽,定时器等,因此在事件循环运行之前(通过exec()),它还没有真正准备好.

我的问题是:当事件循环开始时是否会发出一些信号或事件?

考虑一下.在mainWin.Init()中,您可以创建类似QTimer的内容,甚至可以调用.start()来启动它.但实际上它不会被运行并在调用exec()之前触发事件.这就是我需要知道事件循环何时真正开始的原因.

events qt event-loop signals-slots

18
推荐指数
1
解决办法
5908
查看次数

.NET秒表类可以这么糟糕吗?

我正在制作一个需要一些相当紧凑的时间的应用程序,而秒表类是完美的解决方案.但是,有时候我注意到,当在小型平板电脑上运行时,秒表值已经过时了.我添加了一些调试打印输出,每200毫秒左右监视一次秒表的值:

0:00:197
0:00:502
0:00:702
...
0:03:356
0:12:93

0:13:21
0:13:421
...

它怎么可能从~3秒跳到~13秒?我现在看到底层函数QueryPerformanceCounter()是错误的(小心QueryPerformanceCounter()),但我感觉到其他东西在这里发生了.

任何见解都表示赞赏.

更新:

这里有关于我的代码的更多细节:它非常简单.它是一个WPF应用程序,它Stopwatch在启动时创建一个新对象,然后通过它启动它Start().我然后创建一个DispatcherTimer,像这样:

displayTimer = new DispatcherTimer(); 
displayTimer.Tick += display_Tick; 
displayTimer.Interval = DISPLAY_INTERVAL_TIMESPAN; 
Run Code Online (Sandbox Code Playgroud)

时间跨度为200毫秒.我的调试代码只是在Stopwatch每次dispatchTimer滴答时打印出对象的值.

UPDATE2:

一个有趣的Microsoft支持文章是性能计数器值可能意外地向前飞跃.

.net stopwatch

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

是否有Windows的时间戳绝对时间?(.净)

我正在使用WPF/C#应用程序,我需要锁定用户在一段时间内访问特定功能.基本上,从某个事件发生的那一刻起,我想在接下来的24小时内阻止某些访问.

简单的案例:

  • 事件发生,保存时间戳(使用DateTime或类似)
  • 用户尝试在15小时后访问区域,将现在与时间戳...块进行比较
  • 用户尝试在25小时后访问区域,将现在与时间戳...允许进行比较

都好.但是,用户可以更改系统时间,这对我来说很困难.他们可以提前24小时设置系统时间,我的应用程序将更加明智.

我假设在Windows中更改时间会进入系统的实时时钟......那么是否有任何独立于系统时钟的自由运行计时器?一个用户不能搞砸?

任何见解都表示赞赏.

.net datetime timestamp systemtime

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

帮助理解Windows内存 - "工作集"

我一直在追踪我的应用程序中的一些内存泄漏.这是一个真正的痛苦,但我终于收紧了一切.但是,有一点Windows内存管理令我感到困惑.以下是应用程序内存使用情况的打印输出...

Time        PrivateMemorySize64        WorkingSet64
20:00:36    47480,                     50144
20:01:06    47480,                     50144
20:01:36    47480,                     50144
20:02:06    47480,                     149540
20:02:36    47480,                     149540
20:03:06    47480,                     149540
Run Code Online (Sandbox Code Playgroud)

工作装置在30秒的时间内从49 MB跳到146.这种情况在一夜之间发生,因为应用程序基本上什

该工作组(这是任务管理器显示我)似乎是能够被其他应用程序,如调试器的影响(因为我学会了在寻找内存泄漏).在阅读了有关工作集的文档后,我仍然没有很好的理解.

任何帮助表示赞赏.

更新:感谢响应者的一些链接以及一些额外的搜索,我更好地了解了一个单独的流程如何导致我的流程的工作集增长.很高兴知道工作集中的峰值并不一定表明你的应用程序正在泄漏...还有理由不依赖任务管理器进行内存评估:)

有用的网址:

关于内存使用情况的几句话:工作集与私人工作集

Cyber​​Notes:Windows内存使用说明

memory windows

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

WPF临时显示冻结

我有一个在.NET 3.5上运行的独立WPF应用程序.每隔一段时间,显示屏就会冻结几秒钟.这在经常更新某些内容的屏幕上最为明显.这是一个显示问题的视频.

当显示器冻结时,界面保持响应(视频).

我遇到过一些其他类似问题的帖子,这些帖子将其归因于SW/HW渲染问题.为了安全起见,我完全禁用了硬件渲染,但仍然存在问题.

我在冻结期间运行了一个文件监视器,看看是否有一些特殊的文件访问或活动,但没有什么是不寻常的.

最后说明:目标平台是一款小型触摸屏平板电脑,没有太多内存或马力(512 MB).我只在目标上看到这个问题,而不是在我的开发PC上,它在资源方面有更多.

UPDATE

我以为我通过删除一些动画代码修复了这个问题,但它没有用.我仍然遇到这个问题而且我已经到了最后.

这是我尝试过的更多内容:

  • 升级到.NET 4.0.相同的行为.
  • 为可以通过DispatcherTimer(在UI线程上调用)调用的所有方法添加了调试代码,以确保它们都没有阻止UI.

我真的很难过,并且增加了赏金.正如我所提到的,问题只发生在目标PC(链接)上.

wpf rendering freeze

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

将日志文件保持在一定大小

我有一个应用程序在自助服务终端(C#/ WPF)中的独立面​​板PC上运行.它对文本文件执行一些典型的日志记录操作.PC具有一些有限的磁盘空间来存储这些日志.

我需要做的是能够指定允许日志文件的最大大小.如果在尝试写入日志时超出最大大小,则会将新数据写入日志末尾,并从头开始清除最旧的数据.

获取文件大小没有问题,但有没有任何典型的文件操作技术来保持文件在一定的大小?

c# logging file filesize file-manipulation

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

如何停止仅在XAML中组成的WPF故事板

我有一个在XAML中定义的动画(作为UserControl),它实际上每秒在两个图像之间切换:

    <UserControl x:Class="KaleidoscopeApplication.Controls.RemoteAnimation"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Loaded="RemoteAnimation_Loaded"
    Unloaded="RemoteAnimation_Unloaded">

    <Grid Canvas.Left="500" Canvas.Top="84">
        <Grid.Triggers>
            <EventTrigger RoutedEvent="Grid.Loaded">
                <BeginStoryboard>
                    <Storyboard x:Name="storyboard"  RepeatBehavior="Forever">
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="remote2" BeginTime="00:00:00" Storyboard.TargetProperty="(UIElement.Visibility)">
                            <DiscreteObjectKeyFrame KeyTime="0:0:1">
                                <DiscreteObjectKeyFrame.Value>
                                    <Visibility>Collapsed</Visibility>
                                </DiscreteObjectKeyFrame.Value>
                            </DiscreteObjectKeyFrame>
                            <DiscreteObjectKeyFrame KeyTime="0:0:2">
                                <DiscreteObjectKeyFrame.Value>
                                    <Visibility>Visible</Visibility>
                                </DiscreteObjectKeyFrame.Value>
                            </DiscreteObjectKeyFrame>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Grid.Triggers>

        <Image Name="remote1" Source="/Resources/Elements/Images/341.png"/>
        <Image Name="remote2" Source="/Resources/Elements/Images/342.png"/>

    </Grid>

</UserControl>
Run Code Online (Sandbox Code Playgroud)

它可以在窗口中使用:

<!-- Remote -->
<uControl:RemoteAnimation 
     x:Name="remoteAnimation"
     Canvas.Left="316" Canvas.Top="156" Height="246" Width="121" />
Run Code Online (Sandbox Code Playgroud)

我的问题是,当包含动画的窗口关闭时,它会继续运行并导致泄漏.我无法通过带有storyboard.Stop()的RemoteAnimation_Unloaded()来停止动画......它不会做插孔.

我已经检查了这两个帖子,但它们不适用:

Post1 Post2

我能够进入卸载方法,但调用Stop()不会停止动画.根据我的理解,对于故事板调用Begin()可能是一个问题.isControlable参数存在重载.但是,由于动画完全在XAML中,我不确定如何影响它.

wpf animation xaml user-controls storyboard

6
推荐指数
1
解决办法
6591
查看次数

WPF自定义进度栏剪辑

我创建了一个自定义进度条,如下所示:

<!-- Custom progress bar -->
    <Style
        x:Key="CopyProgressBar"
        TargetType="ProgressBar">
        <Setter
            Property="Template">
            <Setter.Value>
                <ControlTemplate
                    TargetType="ProgressBar">
                    <Grid>
                        <Border
                            x:Name="PART_Track"
                            CornerRadius="5"
                            BorderBrush="#BBC6C4"
                            BorderThickness="2" />
                        <Rectangle
                            x:Name="PART_Indicator"
                            Fill="#A5B2B0"
                            RadiusX="5"
                            RadiusY="5"
                            Margin="3"
                            HorizontalAlignment="Left" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
Run Code Online (Sandbox Code Playgroud)

以下是它的使用方法:

<ProgressBar
            x:Name="copyProgress"
            Height="13"
            Width="279"
            Canvas.Left="158"
            Canvas.Top="103"
            Minimum="0"
            Maximum="100"
            Style="{StaticResource CopyProgressBar}" />
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但是当进度充满时,填充条的右侧会被剪裁,从而消除了我想要的圆形样式.我已经摆弄了填充,边距,最大宽度等,但我找不到防止剪裁的方法.

这是一张图片:

替代文字

wpf styles progress-bar

3
推荐指数
1
解决办法
4760
查看次数

查找Windows应用程序的真实内存占用量

我在C#/ WPF应用程序中遇到了一些OutOfMemoryExceptions,并且在尝试分析内存使用情况时遇到了一些令人困惑的数据.

当应用程序通常运行时,Windows任务管理器将内存使用量显示为大约34 MB(在创建对象和收集垃圾时略微反弹).当我运行内存分析应用程序(如CLR ProfilerdotTrace Memory)时,它们显示总内存使用量大约为1.2 MB.

为什么这个巨大的差异?任务管理器看到这些分析器没有看到什么?

更新:我在我的应用程序中添加了一些诊断代码,以便经常通过Process类打印出各种内存信息.

在运行我的应用程序时,我在DebugDiag中设置了一个规则,以便在发生异常时执行内存转储.我强制异常并发生内存转储.此时,我的应用程序的内存使用量(由任务管理器显示)从32 MB跳到145 MB并保持不变.

您可以在下表中看到此跳转(WorkingSet64).我仍然试图理解Process类提供的所有类型的内存信息.外部应用程序如何使我的应用程序的工作集像这样增长?

这里链接到数据表.

memory windows wpf profiler

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

使用 DSACryptoServiceProvider 存储私钥

我正在尝试将 DSACryptoServiceProvider 类与 C# 一起使用来创建两个 DLL:一个能够验证和创建数字签名,另一个只能进行验证。基本上,我正在尝试创建一个私钥/公钥对并相应地保存它们的密钥(到文件)。

我在使用 ExportParameters() 时遇到了问题。当我尝试导出包含私有信息的密钥(使用序列化)时,私有信息会自动清除。

有没有更好的方法来存储密钥?

提前致谢。

c# encryption digital-signature

0
推荐指数
1
解决办法
1457
查看次数