我目前正在使用Visual Studio在C#中创建一个应用程序.我想创建一些代码,以便当变量的值为1时,执行某段代码.我知道我可以使用if语句,但问题是该值将在异步进程中更改,因此从技术上讲,if语句可以在值更改之前被忽略.
是否可以创建事件处理程序,以便在变量值更改时触发事件?如果是这样,我该怎么做?
完全有可能我误解了if语句是如何工作的!任何帮助将非常感激.
有没有办法在Windows Phone 7中使用ASCIIEncoding?
除非我做错了什么Encoding.ASCII不存在,我需要它用于C# - > PHP加密(因为PHP仅在SHA1加密中使用ASCII).
有什么建议?
我需要一个基类,TInterfacedObject但没有引用计数(所以一种TNonRefCountedInterfacedObject).
这实际上是第n次我需要这样一个课程,不知何故,我总是一次又一次地写作(阅读:复制和粘贴)我自己.我无法相信我没有可以使用的"官方"基类.
在RTL实现的某个地方是否存在基类,IInterface但没有引用计数,我可以从中派生我的类?
由于在Delphi中出现了匿名方法,我想在VCL组件事件中使用它们.显然,为了向后兼容,VCL没有更新,所以我设法做了一个简单的实现,但有几点需要注意.
type
TNotifyEventDispatcher = class(TComponent)
protected
FClosure: TProc<TObject>;
procedure OnNotifyEvent(Sender: TObject);
public
class function Create(Owner: TComponent; Closure: TProc<TObject>): TNotifyEvent; overload;
function Attach(Closure: TProc<TObject>): TNotifyEvent;
end;
implementation
class function TNotifyEventDispatcher.Create(Owner: TComponent; Closure: TProc<TObject>): TNotifyEvent;
begin
Result := TNotifyEventDispatcher.Create(Owner).Attach(Closure)
end;
function TNotifyEventDispatcher.Attach(Closure: TProc<TObject>): TNotifyEvent;
begin
FClosure := Closure;
Result := Self.OnNotifyEvent
end;
procedure TNotifyEventDispatcher.OnNotifyEvent(Sender: TObject);
begin
if Assigned(FClosure) then
FClosure(Sender)
end;
end.
Run Code Online (Sandbox Code Playgroud)
以下是它的用法:
procedure TForm1.FormCreate(Sender: TObject);
begin
Button1.OnClick := TNotifyEventDispatcher.Create(Self,
procedure (Sender: TObject)
begin
Self.Caption := 'DONE!'
end)
end;
Run Code Online (Sandbox Code Playgroud)
我相信很简单,有两个缺点:
我必须创建一个组件来管理匿名方法的生命周期(我浪费了更多的内存,对于间接方式来说它有点慢,我仍然希望在我的应用程序中更清晰的代码)
我必须为每个事件签名实现一个新类(非常简单).这个有点复杂,VCL仍然有非常常见的事件签名,而且对于我创建类的每一个特殊情况,它都是永远完成的. …
我正在寻找可能与单元初始化顺序相关的错误.有没有办法看到哪个initialization部分执行时?我需要知道订单.这是在调试期间,所以我拥有Delphi IDE的全部功能,在我的案例中是Delphi 2009.
我可以设置断点,但是当有很多单位时这是相当繁琐的.
你有什么建议吗?
我见过与"Skype"配合使用的机器人编程示例.是否有可能使用Microsoft的Bot/Cognitive服务工具/框架开发在"Skype for Business"上运行的企业机器人?
skype-for-business microsoft-cognitive skypedeveloper skype-bots microsoft-skype-bot
我的代码很好地涵盖了异常处理(try..except).预计不会发生一些异常,并且会经常发生一些异常,这是预期的,也可以.现在我想为这段代码添加一些自动化测试.知道在执行期间发生了多少异常会很好,所以我稍后可以看到是否提出了预期的数字或发生了什么意外.我不想用调试代码混淆每个异常处理块,所以我的问题是:
有没有办法安装某种全局异常处理程序,它位于所有其他异常处理块之前?我正在寻找一个记录这些例外的中心位置.
谢谢你的任何建议!
(如果这很重要:它是Delphi 2009)
为什么Delphi编译器会忽略这个缺少的括号?
function Test: Boolean;
begin
Exit(True; // <-- eek! it compiles...
end;
Run Code Online (Sandbox Code Playgroud)
我发现我的一些代码看起来像这样,并且首先认为Delphi忽略了我的单元 - 但它只是忽略了这种类型的语法错误.所以现在我当然想知道原因.
我想将类的方法作为回调传递给WinAPI函数.这是可能的,如果可以,怎么样?
设置计时器的示例:
TMyClass = class
public
procedure TimerProc(Wnd:HWND; uMsg:DWORD; idEvent:PDWORD; dwTime:DWORD);
procedure DoIt;
end;
[...]
procedure TMyClass.DoIt;
begin
SetTimer(0, 0, 8, @TimerProc); // <-???- that's what I want to do (last param)
end;
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
编辑:目标是将此类的方法指定为回调.课外没有程序.
编辑2:我感谢你的帮助,但只要该方法没有"TMyClass".在它的名字前面它不是我正在寻找的.我曾经这样做,但想知道是否可以完全保持在面向对象的世界.指针魔术欢迎.
我正在使用下面的代码在Delphi 7中创建一个消息框.但是我在屏幕上还有另一个表单FormStyle设置为fsStayOnTop,并且消息框出现在此表单后面.
有没有办法强制消息框出现在前面?
if Application.MessageBox('Amessage here','Title', +MB_APPLMODAL + MB_ICONQUESTION + MB_YESNO) = IDNO then
Run Code Online (Sandbox Code Playgroud) delphi ×7
c# ×2
delphi-2009 ×2
delphi-xe ×2
ascii ×1
debugging ×1
delphi-7 ×1
encoding ×1
interface ×1
messagebox ×1
silverlight ×1
skype-bots ×1
vcl ×1
winapi ×1
windows ×1