小编dar*_*mos的帖子

C# - 为什么全屏winform应用程序永远不会覆盖任务栏?

我使用的是Windows Vista和C#.net 3.5,但我让我的朋友在XP上运行程序并遇到同样的问题.

所以我有一个C#程序,我在后台运行,在SystemTray中有一个图标.我有一个低级键盘钩,所以当我按下两个键(在这种情况下为Ctr +窗口)时,它将拉动应用程序的主窗体.在组合键按下甚至处理程序中将表单设置为全屏:

this.FormBorderStyle = FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;
Run Code Online (Sandbox Code Playgroud)

所以它基本上有效.当我点击CTR + Windows时,它会调出表单,无论我关注哪个程序.但有时候,任务栏仍然会显示在我不想要的表单上.当我按下那个键组合时,我希望它始终是全屏的.

我认为这与应用程序最初关注的内容有关.但即使我点击我的主表单,任务栏有时也会停留在那里.所以我想知道焦点是否真的是问题.看起来有时候任务栏很顽固,并且不想坐在我的程序后面.

任何人有任何想法如何解决这个问题?

编辑:更多详细信息 - 当您将其置于全屏模式或将powerpoint置于演示模式时,我试图获得与Web浏览器相同的效果.

在Windows窗体中,您可以将边框样式设置为none并最大化窗口.但有时窗口不会出于某种原因覆盖任务栏.一半的时间.

如果我将主窗口放在最顶层,那么当我点击它时其他窗口会落在它后面,如果任务栏被隐藏,我不想要它.

.net c# fullscreen keyboard-hook winforms

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

MSBUild:复制具有基于原始名称的文件(遵循模式)

我在文件夹中有一组文件.它们都具有与DR __.*模式匹配的名称.我想将它们复制到另一个文件夹,但删除DR__前缀.我怎么能用MSBuild做到这一点?我曾经这样使用NAnt这样做:

<mkdir dir="${ClientPath + '\bin\' + ConfigurationName + '\Parameters'}"/>
<foreach item="File" property="Filename" in="CVParameters">
    <if test="${string::contains(Filename, Client + '_')}">
        <property name="newFilename" value="${ string::substring( Filename, string::last-index-of(Filename, '__') + 2, string::get-length(Filename) - string::last-index-of(Filename, '__') - 2) }"/>
        <copy file="${ Filename  }" tofile="${ ClientPath + '\bin\' + ConfigurationName + '\Parameters\' + newFilename }" overwrite="true"/>
    </if>
</foreach>
Run Code Online (Sandbox Code Playgroud)

msbuild design-patterns copy rename

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

使C++类成为监视器(在并发意义上)

我想确保一次只有一个线程可以运行我的C++类的方法.换句话说,让类的行为类似于Monitor.

是否有模式,模板化的方式来做这个,或者我可以使用一些Boost类?因为我到目前为止唯一的想法是添加一个关键部分成员,并在每个方法的开头获取它并在结束时释放它(当然使用RAII).但这似乎非常多余,我不能将它重用于其他类.

c++ concurrency multithreading templates boost

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

单元测试一个工作单元

新的单元测试.我有一个单位的工作,我试图进行单元测试.我可能在这里想念一些简单的东西.我正在尝试对Commit方法进行单元测试.我正在使用nunit和moq.

public class  UnitOfWork : IUnitOfWork
{
    private readonly DbContext _context;
    public UnitOfWork(DbContext ctx)
    {
        _context = ctx;
    }

    public void Commit()
    {
        _context.SaveChanges();
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要做些什么来测试这个?

c# nunit unit-testing moq

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

无法在Team City中运行基本的Powershell脚本

这是我的配置: 在此输入图像描述

在构建日志中,我只看到前两行的输出,然后"使用代码0退出进程"作为此构建步骤的最后一个输出.

我尝试在SYSTEM帐户的构建服务器中打开终端(使用PsTools),因为Team City配置为在所述帐户下运行.然后,我创建了一个具有相同内容的Test.ps1文件,并像Team City一样运行命令:

[Step 1/4] Starting: C:\Windows\system32\cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NonInteractive -Command - <C:\TeamCity\buildAgent\temp\buildTmp\powershell5129275380148486045.ps1 && exit /b %ERRORLEVEL%
Run Code Online (Sandbox Code Playgroud)

(当然,除了.ps1文件和cmd.exe初始部分的路径之外).我看到了两个第一行的输出,然后终端突然消失了!

我在哪里搞砸了?顺便说一句,我是Powershell的新手.

powershell teamcity powershell-1.0

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

在C++项目中使用x86平台

我的Visual Studio 2012解决方案包含C#项目,VB.NET项目,C++/CLI项目和C++项目.目前,我有三个平台:x86,x64Win32.当我添加时x64,我注意到它被所有项目使用.我也想这样做x86,以便我可以删除Win32.

所以我去了配置管理器,选择C++项目,并在平台组合框中我只用了选项:Win32,x64新的和编辑.如果我选择New,唯一可用的选项是ARM.

于是我想到刚刚更换的Win32x86我.vcxproj.没工作(默认为x64).然后我查看了.sln文件,但无法看到x64如何为每个项目设置工作.

msbuild platform visual-c++ visual-studio-2012

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

取消任务并等待它完成

我有一个耗时的任务,我需要在一个单独的线程中运行,以避免锁定GUI线程.随着此任务的进行,它会更新特定的GUI控件.

问题是用户可能在任务结束之前移动到GUI的另一部分,在这种情况下,我必须:

  1. 取消正在进行的任务(如果它处于活动状态)
  2. 等到它完成取消:这是至关重要的,因为耗时任务的目标是更新特定控件.如果多个线程同时尝试执行此操作,事情可能会变得混乱.
  3. 从头开始执行任务

举一个具体的例子,假设表单有两个部分:一个用于导航目录树,另一个用于显示缩略图.当用户导航到另一个目录时,需要刷新缩略图.

首先我想用a BackgroundWorker和a AutoResetEvent等待取消,但我必须弄乱一些东西,因为我在取消时遇到了僵局.然后我读到了TPL,它应该取代BGW和更原始的机制.

使用TPL可以轻松完成吗?

c# task-parallel-library

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

MSBuild和$(ProgramFiles)以32/64位发出

我编写了一个自定义的MSBuild任务,它调用SubWCRev.exe一个(通常)驻留的可执行文件C:\Program Files\TortoiseSVN\bin,无论是32位还是64位,因为TortoiseSVN提供了这两个版本.

问题是,Visual Studio 2010只有32位版本.因此,当我的64位盒子的同事尝试使用我的闪亮的新任务进行构建时,$(ProgramFiles)解析为C:\Program Files(x86)并且它爆炸说SubWCRev.exe无法找到.因为他们有64位版本的TortoiseSVN,它存在C:\Program Files!

有没有比C:\Program Files我的msbuild脚本中的硬编码更好的解决方案,或者每个人都使用32位版本的TortoiseSVN?(实际上它是一个C#项目,我稍微修改了一下MSBuild代码)

msbuild visual-studio-2010 32bit-64bit

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

从自动化测试中获取程序集的目录

我正在尝试编写集成测试来覆盖我的应用程序的大型重构(我想编写单元测试,但它远不是单元可测试的).我正在使用Visual Studio 2010 SP1,Resharper和NUnit.

我目前的问题是我找不到一致的方法来获取执行程序集的目录; 我自己运行应用程序时或者从Visual Studio调试时尝试使用的两种方法,但是在从NUnit或Resharper运行测试时它们会失败.这是代码(VB.NET):

'Method 1    
Core.ConfigFile = My.Application.Info.DirectoryPath + "\" + DRA_CONFIG_FILE
'Method 2
Core.ConfigFile = IO.Path.GetDirectoryName(Reflection.Assembly.GetExecutingAssembly().Location) + "\" + DRA_CONFIG_FILE
Run Code Online (Sandbox Code Playgroud)

当我使用Resharper调试测试时,我得到这样的东西,有两种方法:

C:\Documents and Settings\Tomas\Local Settings\Temp\0xl3rbd5.4qn\MGClient.Test\assembly\dl3\2a373977\60b182bb_e5c9cc01\DRA.config
Run Code Online (Sandbox Code Playgroud)

(它应该是D:\ SVN.DRA.WorkingCopy\DRA.Test\Integration\MGClient.Test\bin\Debug\DRA.config)

我怎样才能获得正确的路径?

.net vb.net resharper nunit visual-studio-2010

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

使用Visual Studio进行调试时看不到boost :: optional内容

如果我试着直接看变量,我会看到一个?符号.如果我创建一个调用该is_initialized函数的手表,我会收到以下错误:

CXX0033:错误:OMF类型信息中的错误

我没有找到关于使用Google的Boost相关错误的更多信息.

还有其他人经历过这个吗?这OutputDebugString无处不在,无处不在,重建......

编辑:使用Visual Studio 2010 SP1与Windows XP SP3 idem和Boost 1.49.0中的所有修补程序

更新:这个问题来来去去,它不会一直发生; 调试器展示台是一个很好的解决方案,我已经将它们作为我的全新工具

c++ windows boost visual-studio-2010 boost-optional

8
推荐指数
3
解决办法
2485
查看次数