问题标签 [system.diagnostics]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 你能启动一个外部 exe 并找到一个控件并获取它的内容吗?
您能否启动一个外部 exe(不是您编写的)并在其表单上找到一个控件。然后获取该控件的内容(只是一个字符串)?
我想启动一个在 HTML/RTF 框中加密数据的软件,然后将数据从应用程序中删除。
这可能吗?如果是的话是什么语言?
杰里米。
.net - 如何以另一种语言而不是英语获取 .Net 方法信息 PerformanceCounterCategory CategoryHelp
我不是以英语为母语的人。我希望你明白我的意思。我写的一点 Powershell 代码
显示计数器和类别的描述
这为我提供了英文描述中的 CounterHelp 和类别帮助。即使我使用英语 Windows,如何获得该计数器或类别的德语描述。我在德文 Windows 上试过,但没有用。如果在英文窗口上是不可能的。我在德语 Windows 上做错了什么?谢谢c# - C# VS2010 在应用程序中判断是否正在调试
是否有机会在 C# 应用程序中确定它当前是否正在调试?这个想法是忽略例如超时,或提供额外的信息。
为了清楚起见,我不是在谈论条件编译器标志DEBUG
。这使我可以决定如何编译代码。它没有提供有关它是否在调试器中运行的信息。
我需要在运行时而不是在编译时决定。
.net - 无法理解 .net 2010 跟踪和 app.config
在我的 app.config 中,我想设置 3 个跟踪级别(开关?):详细、警告和无。在代码的调试版本中,我希望详细开关处于活动状态,在发布中我想要警告。在特殊情况下,我的应用程序用户可以修改配置文件以禁用所有跟踪。
我希望在控制台上输出调试跟踪,而仅将跟踪发布到日志文件。
我写了以下内容:
然后在代码中我这样调用跟踪:
[...]
我想我缺少一些东西。我如何对 Trace 方法说正确的开关使用?我的应用程序用户如何更改配置文件以允许跟踪或禁用它?
谢谢。
.net - 如何区分自定义跟踪侦听器中的 Trace 和 Debug 调用?
Trace.Listeners 和 Debug.Listeners 共享相同的内部集合,因此我无法将跟踪侦听器添加到 Trace.Listeners 并将调试侦听器添加到 Debug.Listeners 以区分它们。
我怎样才能做到这一点?
编辑:
为什么我想这样做只是因为我正在为我们的应用程序编写一个日志记录层,并且我想通过系统跟踪不同的日志,其中 Debug/Trace 是两个日志源(还有几个其他源) 我想跟踪。
c# - CorrelationManager.LogicalOperationStack 是否与 Parallel.For、Tasks、Threads 等兼容
有关背景信息,请参阅此问题:
该问题询问 Tasks 如何影响Trace.CorrelationManager.ActivityId。@Greg Samson 用一个测试程序回答了他自己的问题,表明 ActivityId 在任务上下文中是可靠的。测试程序在Task委托的开头设置一个ActivityId,休眠模拟工作,然后在最后检查ActivityId以确保它是相同的值(即它没有被另一个线程修改)。程序运行成功。
在研究线程、任务和并行操作的其他“上下文”选项(最终为日志记录提供更好的上下文)时,我遇到了Trace.CorrelationManager.LogicalOperationStack的一个奇怪问题(无论如何这对我来说很奇怪)。我已经在下面复制了我对他的问题的“答案”。
我认为它充分描述了我遇到的问题(在 Parallel.For 的上下文中使用时,Trace.CorrelationManager.LogicalOperationStack 显然已损坏 - 或其他东西,但前提是 Parallel.For 本身包含在逻辑操作中) .
以下是我的问题:
Trace.CorrelationManager.LogicalOperationStack 是否可以与 Parallel.For 一起使用?如果是这样,如果逻辑操作已经在 Parallel.For 启动时生效,是否会有所不同?
是否有一种“正确”的方式将 LogicalOperationStack 与 Parallel.For 一起使用?我可以对这个示例程序进行不同的编码以使其“工作”吗?通过“作品”,我的意思是 LogicalOperationStack 始终具有预期的条目数,并且条目本身就是预期的条目。
我已经使用 Threads 和 ThreadPool 线程进行了一些额外的测试,但我必须返回并重试这些测试,看看我是否遇到了类似的问题。
我会说,似乎任务/并行线程和线程池线程确实从父线程“继承”了 Trace.CorrelationManager.ActivityId 和 Trace.CorrelationManager.LogicalOperationStack 值。这是意料之中的,因为这些值是由 CorrelationManager 使用CallContext的 LogicalSetData 方法(而不是 SetData)存储的。
再次,请参考这个问题以获取我在下面发布的“答案”的原始上下文:
另请参阅 Microsoft 的 Parallel Extensions 论坛上的类似问题(迄今为止尚未回答):
[开始粘贴]
请原谅我将其发布为答案,因为它并不能真正回答您的问题,但是,它与您的问题有关,因为它涉及 CorrelationManager 行为和线程/任务/等。我一直在研究使用 CorrelationManager 的LogicalOperationStack
(和StartLogicalOperation/StopLogicalOperation
方法)在多线程场景中提供额外的上下文。
我以您的示例为例并对其进行了一些修改,以添加使用 Parallel.For 并行执行工作的能力。另外,我使用StartLogicalOperation/StopLogicalOperation
括号(内部)DoLongRunningWork
。从概念上讲,DoLongRunningWork
每次执行时都会执行以下操作:
我发现,如果我将这些逻辑操作添加到您的代码中(或多或少),所有逻辑操作都保持同步(堆栈上的预期操作数和堆栈上的操作值始终为预期的)。
在我自己的一些测试中,我发现情况并非总是如此。逻辑操作堆栈正在“损坏”。我能想出的最好解释是,当“子”线程退出时,将 CallContext 信息“合并”到“父”线程上下文中导致“旧”子线程上下文信息(逻辑操作)为“由另一个同级子线程继承”。
问题也可能与 Parallel.For 显然使用主线程(至少在示例代码中,如所写)作为“工作线程”之一(或在并行域中应该调用的任何线程)这一事实有关。每当执行 DoLongRunningWork 时,都会启动一个新的逻辑操作(在开始时)并停止(在结束时)(即,推入 LogicalOperationStack 并从中弹出)。如果主线程已经有一个有效的逻辑操作,并且如果 DoLongRunningWork 在主线程上执行,则启动一个新的逻辑操作,因此主线程的 LogicalOperationStack 现在有两个操作。DoLongRunningWork 的任何后续执行(只要 DoLongRunningWork 的这种“迭代”在主线程上执行)将(显然)继承主线程'
我花了很长时间才弄清楚为什么我的示例中的 LogicalOperationStack 的行为与您的示例的修改版本不同。最后我看到,在我的代码中,我将整个程序括在一个逻辑操作中,而在我修改过的测试程序版本中,我没有。这意味着在我的测试程序中,每次执行我的“工作”(类似于 DoLongRunningWork),已经有一个有效的逻辑操作。在您的测试程序的修改版本中,我没有将整个程序括在逻辑操作中。
因此,当我修改您的测试程序以将整个程序括在逻辑操作中并且如果我使用 Parallel.For 时,我遇到了完全相同的问题。
使用上面的概念模型,这将成功运行:
虽然这最终会因为 LogicalOperationStack 明显不同步而断言:
这是我的示例程序。它与您的相似之处在于它具有操作 ActivityId 和 LogicalOperationStack 的 DoLongRunningWork 方法。我也有两种风格的 DoLongRunningWork。一种使用Tasks,一种使用Parallel.For。也可以执行每种风格,以使整个并行化操作包含在逻辑操作中或不包含在逻辑操作中。因此,总共有 4 种方式来执行并行操作。要尝试每一个,只需取消注释所需的“使用...”方法,重新编译并运行。 UseTasks
, UseTasks(true)
, 并且UseParallelFor
应该都运行完成。 UseParallelFor(true)
将在某个时候断言,因为 LogicalOperationStack 没有预期的条目数。
LogicalOperationStack 是否可以与 Parallel.For (和/或其他线程/任务构造)一起使用或如何使用它的整个问题可能值得自己提出问题。也许我会发布一个问题。同时,我想知道您对此是否有任何想法(或者,我想知道您是否考虑过使用 LogicalOperationStack,因为 ActivityId 似乎是安全的)。
[结束粘贴]
有人对这个问题有任何想法吗?
c# - 使用 Moq 模拟 TraceListener
为什么 Moq 验证失败并显示“Moq.MockException:未在模拟上执行调用”?
.net - 我应该什么时候使用 Tracing vs Logger.NET、Enterprise Library、log4net 或 Ukadc.Diagnostics?
如何在标准跟踪、Logger.NET、企业库、log4net 或 Ukadc.Diagnostics 之间进行选择?
有没有一种情况比另一种更合适?……那会是什么?(ASP.NET、控制台应用、Azure 云、SOHO、企业...)
有什么好处或坏处?
我错过了任何其他主要的日志框架吗?
c# - 计算服务器正常运行时间给出“找不到网络路径”
对于以下代码,我得到
System.ComponentModel.Win32Exception:找不到网络路径
任何人都可以帮忙吗?
编辑:我尝试使用机器名称,但我仍然得到同样的错误!注:1.2.3.4 为样本值。
c# - 在接收 Process.Exited 事件时更新父进程 GUI - WPF
我正在尝试在应用程序中启动一个进程。下面的代码只是在单击主 GUI 的按钮时启动记事本。现在,当启动记事本时,该按钮被禁用。我订阅了 Process.Exited 甚至在记事本应用程序关闭时接收通知。收到通知后,我想再次重新启用该按钮。
但是,当我调用 button1.IsEnabled = true; 时代码崩溃了。似乎 Process.Exit 不是主 GUI 线程的一部分,因此当我尝试在其中更新 GUI 时它崩溃了。此外,当我调试时,我没有收到任何异常说我正在尝试从外部访问主线程或其他东西。
有没有办法在子进程退出时通知 GUI?