小编Eld*_*Mor的帖子

在NetBeans中格式化完整项目

要在编辑器中格式化文件,请按Alt + Shift + F. 有没有办法在NetBeans中格式化整个项目(6.8,如果这有什么不同)?

netbeans

23
推荐指数
3
解决办法
8404
查看次数

更改NSIS安装程序属性

我有一个名为setup.exe的基于NSIS的安装程序文件.当我进入Properties-> Details时,很多细节都缺失了.当我运行安装程序时,UAC请求提升权限(这没关系),但发布者是"未知".

如何在最终的setup.exe中设置这些属性,最好只更改NSIS安装程序脚本本身?

nsis

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

FileSystemWatcher不报告锁定文件中的更改

我正在使用FileSystemWatcher监视文件夹,如下所示:

watcher = new FileSystemWatcher(folder);
watcher.NotifyFilter = NotifyFilters.Size;
watcher.Changed += changedCallback;
Run Code Online (Sandbox Code Playgroud)

当我在该文件夹中的记事本中打开一个新文件并保存时,我会收到通知.如果我继续写作然后保存,我会收到通知.如果我保存它关闭文件,我会收到通知.正是我想要的.

但是,事实证明,如果我在该文件夹中创建一个文件并将其共享模式设置为FileShare.Read,然后我写入它,则在文件关闭之前我不会收到任何通知.另一种解决方法是打开文件(例如在记事本中),这显然会导致其状态更新,然后我的监控应用程序会收到通知.另一种解决方法是我可以在Windows资源管理器中执行刷新,这再次导致文件状态更新.

有趣的是,如果我在进行更改时查看Windows资源管理器,我会注意到:

  1. 如果共享文件进行读写,则一旦保存,它的大小将立即在Windows资源管理器中更新.
  2. 如果共享文件仅供读取,则不会在Windows资源管理器中立即更新其大小,除非我手动刷新窗口.

因此,我的监控应用程序似乎与Windows资源管理器共享相同的行为.我正在考虑运行一个只扫描文件夹中文件的线程,但我想知道在这种情况下是否还有更优雅的事情要做.

顺便说一下,我正在使用Win7,我不确定这个问题是否也会在其他Windows版本上发生.

谢谢!

编辑:在C++中使用ReadDirectoryChanges得到了相同的结果.实现我之前谈到的线程并没有帮助.我想知道Windows资源管理器中的F5究竟是做什么的,因为它确实会导致报告更改.

c# filesystemwatcher

13
推荐指数
1
解决办法
5310
查看次数

如何在c#中正确终止工作线程

问题陈述

我有一个工作线程,基本上扫描文件夹,进入其中的文件,然后睡了一会儿.扫描操作可能需要2-3秒但不多.我正在寻找一种方法来优雅地阻止这个线程.

澄清:我想在线程休眠时停止线程,而不是在扫描时.但是,问题是我不知道线程的当前状态是什么.如果它正在睡觉我想让它立即退出.如果正在扫描,我希望它在尝试阻止的那一刻退出.

尝试解决方案

起初我正在使用睡眠和中断.然后我发现中断并没有真正中断睡眠 - 只有在线程TRIES进入睡眠状态时它才有效.

所以我切换到Monitor Wait&Pulse.然后我发现Pulse只在我实际上在等待时才有效.所以现在我有一个看起来像这样的线程:

while (m_shouldRun)
{
    try
    {
        DoSomethingThatTakesSeveralSeconds();
        lock (this)
        {
            Monitor.Wait(this, 5000);
        }
    }
    catch (ThreadInterruptedException)
    {
        m_shouldRun = false;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我需要制作我的Stop功能.所以我开始:

public void Stop()
{
    m_shouldRun = false;
    lock (this)
    {
        Monitor.Pulse(this);
    }
    thread.Join();
}
Run Code Online (Sandbox Code Playgroud)

但是这不起作用,因为我可能在线程工作时发出脉冲(虽然它没有等待).所以我添加了Interrupt:

public void Stop()
{
    m_shouldRun = false;
    thread.Interrupt();
    lock (this)
    {
        Monitor.Pulse(this);
    }
    thread.Join();
}
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用:

public void Stop()
{
    m_shouldRun = false;
    while (!thread.Join(1000))
    {
        lock (this)
        { …
Run Code Online (Sandbox Code Playgroud)

c# multithreading

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

将持久数据保存在内存中

我即将在C#中开发Windows服务.此服务需要跟踪系统中的事件,并不时将一些数据写入文件.这些正在进行的事件形成一定的状态,因此我会将状态保留在内存中并在事件到达时更新它.我不想让事情过于复杂,所以我不希望状态在磁盘上持久化,但我想知道我是否能以某种方式使其在内存中持久化,以便在服务崩溃时(并且自动重启Windows)它可以从它离开的地方继续前进(可能会丢失一些事件,而不是什么大不了的事).

我正在考虑创建一个"共享"内存区域,从而让Windows管理它,并仅在服务中使用它 - 但我不确定该服务在服务终止后是否会持续存在.

有任何想法吗?

编辑:我不是在寻找一个矫枉过正的解决方案.数据有点重要,所以我想让它在内存中等待,直到服务重新启动,但数据不是重要.如果我可以轻松地持久保存数据,而不使用文件,外部第三方进程等等,那么这将是一个很好的功能.我理想的解决方案是一个简单的内置功能(在.NET或Windows中),它将为我提供一些内存持久性,只是为了从崩溃事件中恢复.

.net c# windows persistence shared-memory

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

JPA本机查询中的位置参数问题

我正在尝试:

String sql = "SELECT email FROM users WHERE (type like 'B') AND (username like '?1')";
List results = em.createNativeQuery(sql).setParameter(1, username).getResultList();
Run Code Online (Sandbox Code Playgroud)

但我得到IllegalArgumentException,它告诉我参数超出范围.我究竟做错了什么?

java sql hibernate jpa

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

在C#XML序列化中删除数组名称

我正在尝试在序列化XML时得到这个结果:

<Root Name="blah">
  <SomeKey>Eldad</SomeKey>
  <Element>1</Element>
  <Element>2</Element>
  <Element>3</Element>
  <Element>4</Element>
</root>
Run Code Online (Sandbox Code Playgroud)

换句话说 - 我试图在"root"元素中包含一个数组,以及其他键.

这是我粗暴的尝试:

[XmlRootAttribute(ElementName="Root", IsNullable=false)]
public class RootNode
{
    [XmlAttribute("Name")]
    public string Name { get; set; }

    public string SomeKey { get; set; }

    [XmlArrayItem("Element")]
    public List<int> Elements { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的序列化:

string result;
XmlSerializer serializer = new XmlSerializer(root.GetType());
StringBuilder sb = new StringBuilder();
using (StringWriter sw = new StringWriter(sb))
{
    serializer.Serialize(sw, root);
    result = sw.ToString();
}
Run Code Online (Sandbox Code Playgroud)

但是,这是我的结果(为清晰起见删除了命名空间):

<Root>
  <SomeKey>Eldad</SomeKey>
  <Elements>
    <Element>1</Element>
    <Element>2</Element>
    <Element>3</Element>
  </Elements>
</Root>
Run Code Online (Sandbox Code Playgroud)

有没有办法删除"元素"部分?

c# xml serialization

5
推荐指数
1
解决办法
4030
查看次数

需要在没有UAC弹出窗口的情况下提升权限

我有一个应用程序,它是另一个应用程序(我的主要应用程序)的启动器.启动器进入FTP服务器,下载更新并安装它们.但是,更新可执行文件需要将一些DLL和EXE复制到主应用程序的安装目录中,该目录位于Program Files中.因此,我目前需要提升更新程序的权限.

这是一个问题,因为我的应用程序在启动时启动,并且通常只会加载到系统托盘(该应用程序与messenger/skype相当).如果我在尝试"静默"更新应用程序时开始在屏幕上弹出UAC警告,那就不再那么沉默了.

我现在看到的唯一避免问题的方法是向所有用户授予程序文件安装目录的权限,但我不愿意这样做.还有其他想法吗?

我使用的是Windows 7,应用程序都在C#中.

c# uac

5
推荐指数
1
解决办法
5061
查看次数

在git中合并远程分支

我正在开发一个系统,我正在跟踪另一个项目的路径,添加我自己的东西,但不是直接添加到原始项目.我用三个远程分支设置我的存储库:

  1. 大师 - 我的发展在哪里.
  2. 供应商 - 我定期与原始项目同步的地方.
  3. 集成 - 我想合并(主)和(供应商)的地方.

我的工作流程理念是自动进行同步(因为它基本上是各种快速的),并且集成是半手动的(因为它需要合并和修复).我已经介绍了第一部分(同步),但我无法弄清楚将Master和Vendor集成到集成中的实际问题.

这是git branch -a的输出:

* integration
  master
  vendor
  remotes/origin/HEAD -> origin/master
  remotes/origin/integration
  remotes/origin/master
  remotes/origin/vendor
Run Code Online (Sandbox Code Playgroud)

我如何从这一点前进到:

  1. 将此工作空间与远程存储库同步?
  2. 将供应商和主人合并为一体化?
  3. 将集成推送回远程存储库?

显然,如果我在工作流程中出现问题,我很乐意听到它.

git git-remote

5
推荐指数
1
解决办法
4586
查看次数

我可以在不安装可分发的 VC++ 包的情况下将 MSVCRT DLL 与我的应用程序捆绑在一起吗

我有一个复杂的应用程序,无法与 CRT 静态链接,但另一方面不需要安装管理员权限(因为它没有执行任何需要它的操作)。安装 CRT 以便动态链接的正常方法是安装 MS 可分发 CRT,但它需要管理员权限。

我正在考虑简单地将 MSVCRT100 DLL 放在与可执行文件相同的目录中,以缓解该问题,但我不确定这种做法是否有任何缺点,因为在我看到的任何地方都没有宽恕或谴责这种做法。除了遵循静态链接与安装可分发文件的通常做法之外,还有什么理由不这样做?

c++ winapi msvcrt visual-studio-2010

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

使用.NET检测用户是否远离PC

我有一个桌面应用程序,我想知道两件事:

  1. 用户当前是否在PC上(更具体地说,他是否向PC提供任何输入),因此如果需要,我可以将其状态更改为"离开"; 和
  2. 屏幕保护程序是否正在运行,因此我可以在此期间执行更多CPU密集型工作.

我正在使用C#/ .NET.您如何建议解决这两项任务?

注意:WIN32调用和任何非托管代码解决方案一样好.

.net c# user-input screensaver

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