我已经痛苦地意识到需要在事件驱动的GUI代码中编写以下代码模式的频率,其中
private void DoGUISwitch() {
// cruisin for a bruisin' through exception city
object1.Visible = true;
object2.Visible = false;
}
Run Code Online (Sandbox Code Playgroud)
变为:
private void DoGUISwitch() {
if (object1.InvokeRequired) {
object1.Invoke(new MethodInvoker(() => { DoGUISwitch(); }));
} else {
object1.Visible = true;
object2.Visible = false;
}
}
Run Code Online (Sandbox Code Playgroud)
这是C#中的一个尴尬模式,无论是记忆还是打字.有没有人提出某种捷径或构造,在一定程度上自动化?如果有一种方法可以将函数附加到执行此检查的对象,而不必经历所有这些额外的工作,如object1.InvokeIfNecessary.visible = true
类型快捷方式,那就太酷了.
上一页答案已经讨论的只是打电话的invoke()每次不切实际,甚则调用()语法既效率低下,仍然尴尬应对.
那么,有没有人想出任何捷径?
所以我试着搜索,希望有人对此有一个很好的解释,没有运气.
我问了我的另一个朋友一个不同的问题(我现在已经忘记了),他的回答只是在他签字之前的"反思".
我仍然是C#世界的新手,曾经是业余的VB.net程序员(也是JavaScript,ActionScript和C),我正在尽我所能去掌握这些先进的概念.
有许多哲学答案 - "应用程序在看自己" - 但它们没有提供任何实际的提示,说明实际发生的事情或在该环境中如何使用它.
那么,什么是反思,为什么重要,以及为什么/如何使用它?
在我使用System.Threading.Timer
Windows服务项目之前,我正在做一个小型测试项目.它工作得非常好,但计时器会在一两分钟后自行停止.
测试项目的完整来源是:
using System;
using System.Windows.Forms;
using System.Threading;
namespace studyTimers {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {
TimerCallback timerDelegate = new TimerCallback(tick);
System.Threading.Timer testTimer = new System.Threading.Timer(timerDelegate, null, 1000, 1000);
}
void tick(Object obj) {
if (label1.InvokeRequired) {
label1.Invoke(new MethodInvoker(() => tick(obj)));
} else {
label1.Text = DateTime.Now.ToString();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
显然,目标是用当前时间更新标签.我注意到稍后更新停止了.为什么会这样?
由于用户混淆,我们的应用程序需要单独的安装程序,用于32位和64位版本的Windows.虽然32位安装程序在win64上运行良好,但它有可能造成支持问题,我们希望防止这种情况发生.
我想阻止32位MSI安装程序在64位Windows机器上运行.为此,我有以下条件:
<Condition Message="You are attempting to run the 32-bit installer on a 64-bit version of Windows.">
<![CDATA[Msix64 AND (NOT Win64)]]>
</Condition>
Run Code Online (Sandbox Code Playgroud)
使用Win64定义如下:
<?if $(var.Platform) = "x64"?>
<?define PlatformString = "64-bit"?>
<?define Win64 ?>
<?else?>
<?define PlatformString = "32-bit"?>
<?endif?>
Run Code Online (Sandbox Code Playgroud)
事实是,我无法使这项检查工作正常.无论是一直开火,还是一无所有.目标是检查运行时msix64
变量是否存在于编译时Win64
变量中,如果这些变量没有排列则抛出错误,但逻辑不起作用我打算如何操作.有没有人想出更好的解决方案?
我正在开发一个项目,在我无法控制的网页上注入JS + CSS + HTML.
我担心主机页面样式化我注入的代码 - 我希望我注入的代码只服从我的样式,而不是他们的样式.
目前我唯一能做到这一点的方法就是要明确指定容器<div>
类的每个可能的标签(使用预定义的,已知的浏览器默认值),并依靠继承将这些规则传播到我的其余部分.注入HTML.这个CSS需要出现在页面<head>
标签的底部.
我不认为这是最好的解决方案,我不期待实施它.当然有更好的方法.
我试图通过WiX 3.0让我的应用程序成为安装程序.确切的代码是:
<File Id="ServiceComponentMain" Name="$(var.myProgramService.TargetFileName)" Source="$(var.myProgramService.TargetPath)" DiskId="1" Vital="yes"/>
<!-- service will need to be installed under Local Service -->
<ServiceInstall
Id="MyProgramServiceInstaller"
Type="ownProcess"
Vital="yes"
Name="MyProgramAddon"
DisplayName="[removed]"
Description="[removed]"
Start="auto"
Account="LocalService"
ErrorControl="ignore"
Interactive="no"/>
<ServiceControl Id="StartDDService" Name="MyProgramServiceInstaller" Start="install" Wait="no" />
<ServiceControl Id="StopDDService" Name="MyProgramServiceInstaller" Stop="both" Wait="yes" Remove="uninstall" />
Run Code Online (Sandbox Code Playgroud)
事情是由于某种原因,LocalService在"安装服务"步骤失败,如果我将其更改为"LocalSystem",则安装程序会在尝试启动服务时超时.
该服务在系统启动时手动启动,并且所有意图和目的都很有效.我听说在LocalService下正在使服务正常工作存在问题,但Google并没有真正帮助,因为每个人的回答都是"让它工作到kthx".
只是希望在安装过程中设置并启动此服务,就是这样.有帮助吗?谢谢!
我对音频DSP编程感兴趣,但没有任何特定语言.我似乎记得有一个网站有常见DSP应用程序(压缩器,限制器等)的配方,但我似乎无法在我的书签或谷歌中找到它....这里有没有人知道这样的地方?
除此之外,我在数学方面不是很有文化,但我对算法和逻辑以及几种不同语言的工作知识有很强的理解力.对于初学的DSP程序员来说,有哪些好的资源?
谢谢
汤姆
那是怎么回事?似乎获取正在运行的HtmlDocument对象的唯一方法是复制mshtml/webbrowser控件的Document属性.但产卵是sloooooooooooow.我想避免编写自己的HTML解析器,HtmlAgilityPack是copyleft.
是否有其他来源获取实例化的HtmlDocument,我可以将HTML从字符串转储到?
或者,当使用带有img标签和tr元素的InnerHtml/OuterHtml时,有没有办法覆盖HtmlElement令人讨厌的习惯?
编辑:我指的是System.Windows.Forms.HtmlDocument.我很抱歉,我还是C#和.Net的新手,对COM以及本主题带来的其他一些事情知之甚少.
出于好奇,是否可以在Perl脚本中创建,实例化或以其他方式访问除STDOUT和STDERR之外的其他输出缓冲区?
用例是管道输入文件或其他命令的附加输出,例如 ./doublerainbow.pl 3>full_on.txt 4>all_the_way!.txt
我最近遇到了一些令人尴尬的情况,我不得不意外地向客户端发送了一个构建,而不是所有的调试标志和变量都未设置.(它正在向调试发送请求而不是发布服务器等...)
部分原因是我的代码组织很差; 我已经解决了这个问题.
但是,Flash似乎不允许设置不同的构建配置,并且Actionscript Compile设置托管各种交换机,以便忘记检查/取消选中某些内容(OMG,我忘了禁用调试器支持!)就像发生在我身上一样.在任何情况下,我发现在我的发布配置和调试配置之间手动跳转很容易搞砸.
那么,其他开发人员,您使用什么技术来防止在测试配置和您向老板/客户/谁发出的构建配置之间跳转?
我知道我应该慢下来,但我更喜欢设置一些东西,我只能翻转开关.经过长时间的中断后我才重新回到Flash中(Flash MX + 2004年的一点点).
哦,我知道禁用调试支持和设置导入密码是徒劳的,所有这一切,我的目标是简单地将脚本小子放在我的项目之外.反编译器胜过一切......
无论如何,谢谢!