当我的.Net 3.5应用程序运行时,Windows任务管理器显示我的应用程序有16个线程.我为进程收集了一个内存转储,并使用WinDbg/SOS打开它.
运行!threads命令显示我有:
ThreadCount: 456
UnstartedThread: 0
BackgroundThread: 6
PendingThread: 0
DeadThread: 449
Hosted Runtime: no
Run Code Online (Sandbox Code Playgroud)
以下是!threads输出的前几行:
ID OSID ThreadOBJ State GC Context Domain Count APT Exception
0 1 2848 004366a8 6020 Enabled 11738178:11738778 0042a9f0 0 STA
2 2 1820 004430e0 b220 Enabled 00000000:00000000 0042a9f0 0 MTA (Finalizer)
7 5 2c38 055d6330 80a220 Enabled 00000000:00000000 0042a9f0 0 MTA (Threadpool Completion Port)
8 4 e18 04116900 180b220 Enabled 1157cdc8:1157e778 0042a9f0 0 MTA (Threadpool Worker)
XXXX 6 0 055f94b0 9820 Enabled 00000000:00000000 … 我不希望我的WPF GUI与Windows字体大小选项(DPI)一起扩展.这不仅仅是在UserControl上指定固定字体大小的问题,因为缩放会影响UserControl中的图像和边框.我可以在UserControl上设置一个属性来关闭scalling吗?如果没有,我该怎么办?
在单元测试中,如何实例化自定义元素(或视图)并访问实时 DOM元素?
我读到了这篇文章,它实现了自定义元素的实例化,但我认为我无法访问DOM元素.
顺便说一下,我知道Protractor和端到端测试,但这不是我在这里寻找的.
2016年10月14日更新:
我发现我可以注册这样的实例来完成@inject(Element)工作:
container = new Container().makeGlobal();
container.registerInstance(Element, document.createElement('div') );
vm = BehaviorInstance.createForUnitTest(Test, {}, {});
Run Code Online (Sandbox Code Playgroud)
虽然注入工作(我的测试自定义元素得到参考),但这并没有导致aurelia对元素做任何事情.我的自定义元素的模板尚未使用,因此元素innerHtml是<div></div>.
我们有一个WinForms应用程序,我们正在逐步转换为WPF.此时应用程序的主窗体是一个Form(WinForm),它包含一个用WPF构建的垂直侧边栏.侧栏托管在ElementHost控件中.
在主窗体中,KeyPreview设置为true,我们重写OnKeyDown()以处理应用程序范围的键盘快捷方式.当侧边栏具有焦点时,键盘事件不会发送到OnKeyDown.
解决这个问题的正确方法是什么?
如果我将设置添加到我的应用程序的web.config文件中,是否有API可以从我的应用程序中读取设置,或者我是否必须使用XML库读取该文件?
我有一个Node脚本以PluginManager.exe这种方式调用外部程序():
const util = require('util');
const execFile = util.promisify(require('child_process').execFile);
const process = execFile('PluginManager.exe', ['/install']);
process
.then(({stdout, stderr}) => console.log('done', stdout, stderr))
.catch(e => console.log(e));
Run Code Online (Sandbox Code Playgroud)
PluginManager.exe需要8秒才能执行.我的问题是,在子进程退出后,Node脚本会再运行10秒钟.我知道什么时候PluginManager.exe完成,因为我可以看到它从Windows任务管理器进程列表中消失.
是什么让Node进程运行了这么长时间,我该怎么做以确保它在子进程退出后立即退出?
我目前使用自定义gzip编码器为我的WCF服务.如果可能的话,我想用内置的IIS 7压缩替换它.我无法在线查找有关如何操作的信息.
有没有办法为WCF服务启用IIS 7压缩?你知道这是否会与.Net 4一起开箱即用?
编辑6月15日:我仍在寻找一种用主流方法替换我们的自定义gzip编码器的方法,所以如果您知道如何使用.Net 4和IIS 7,请回答这个问题.
谢谢
补充工具栏:我尝试手动执行此操作
由于我无法通过简单地旋转几个旋钮找到如何做到这一点,我决定尝试手动启用它.
到目前为止,我有:
mimeType="application/soap+xml"和的压缩mimeType="application/xop+xml".我使用HTTP嗅探器来嗅探从我的应用程序发送的流量(Windows窗体).我看到请求没有Accept-Encoding:gzip,deflatehttp标头.
所以我
OperationContextScope类及其手动将其添加到所有传出呼叫OutgoingMessageProperties.(如果我找到解决方案,我会在稍后发布详细信息).使用http嗅探器,我可以看到客户端标头现在具有正确的标头:
POST /### path to my service ####/MyService.svc HTTP/1.1
MIME-Version: 1.0
Content-Type: multipart/related; type="application/xop+xml";
start="<http://tempuri.org/0>";
boundary="uuid:####### some uuid #############";
start-info="application/soap+xml"
Accept-Encoding: gzip,deflate
Host: ####### my server name #############
Content-Length: 1753
Expect: 100-continue
Run Code Online (Sandbox Code Playgroud)
但服务器响应仍未压缩.
为什么服务器响应未压缩?我使用过正确的mime类型吗?一旦我让服务器返回压缩答案,客户端会自动解压缩它还是必须在客户端编写代码进行解压缩?
谢谢你的帮助
我正在学习这门SynchronizationContext课程.我试图了解SynchronizationContext.SetSynchronizationContext()在WinForm/WPF应用程序的上下文中调用的常见用法场景是什么.设置SynchronizationContext线程是什么意思?我什么时候该做,为什么?另外,如果我设置它,我应该在某个时候取消它吗?
编辑:
在他的回答中,@ Hans Passant问我为什么在考虑SetSynchronizationContext().我的想法是在工作线程上设置上下文,以便在该线程上运行的代码将具有要使用的上下文.
private void button3_Click(object sender, EventArgs e)
{
var syncContext = SynchronizationContext.Current;
Task.Factory.StartNew(() =>
{
// Setup the SynchronizationContext on this thread so
// that SomeAsyncComponentThatNeedsACurrentContext
// will have a context when it needs one
if (SynchronizationContext.Current == null)
SynchronizationContext.SetSynchronizationContext(syncContext);
var c = new SomeAsyncComponentThatNeedsACurrentContext();
c.DoSomething();
});
}
Run Code Online (Sandbox Code Playgroud) 我有一个WebAPI端点(在IIS中托管),它从数据库(字节数组)读取图像并以PNG格式返回它们.这段代码很简单:
Image img = ImageHelper.ReadFromDatabase(…);
using (MemoryStream ms = new MemoryStream())
{
img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK);
response.Content = new ByteArrayContent(ms.ToArray());
response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png");
response.ConfigureResponseCachability(parseConceptVersion, TimeSpan.FromHours(1));
return response;
}
Run Code Online (Sandbox Code Playgroud)
我有三个Web服务器,其中一个上面的代码导致此错误:A generic error occurred in GDI+.at at System.Drawing.Image.Save().
服务器运行不同的OS版本:
我已经更改了上面的代码以返回JPEG而不是PNG,并修复了问题.
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
Run Code Online (Sandbox Code Playgroud)
我必须发送PNG图像,所以我需要找到根本原因.
我将代码转换为使用WPF类(System.Windows.Media)而不是Windows Form类.结果很有趣:我在创建PNG时也出错了.这次错误发生The component registration is invalid. (Exception from HRESULT: 0x88982F8A)在System.Windows.Media.Imaging.BitmapEncoder.SaveFrame()
我有办法看看Tortoise HG发布的Mercurial命令是什么?例如,如果我在Tortoise中使用Shelve命令,我想看看它是如何(以及如果)在引擎盖下调用'hg shelve'.