我希望使用c#在Windows窗体应用程序中按分钟(按时钟)每分钟做一些事情.我只是想知道最好的方法是什么?
我可以使用一个计时器并将其间隔设置为60000,但为了让它在一分钟内运行,我必须准确地启用它,而不是真的可行.
我可以使用一个计时器并将其间隔设置为1000.然后在其tick事件中,我可以根据我设置的变量检查当前时钟,如果分钟已经改变,则运行我的代码.这让我很担心,因为我让我的电脑每1秒做一次检查,以便每1分钟进行一次工作.当然这很难看?
我正在使用Windows窗体和.Net 2.0,因此不想使用.Net 3.5附带的DispatchTimer
这一定是一个相当普遍的问题.你有没有更好的方法来做到这一点?
我已经看到这个问题出现在一些地方,没有看到任何好的答案.因为我必须自己做几次,我以为我会发布我的解决方案.如果你有更好的,请发布.
NB这是使用ASP.NET MVC 4 Beta 2版本的Web API - 未来的版本可能会改变!
更新:这仍然适用于ASP.NET MVC 4 RC
我正在WinForms中学习Rx,并拥有以下代码:
// Create an observable from key presses, grouped by the key pressed
var groupedKeyPresses = Observable.FromEventPattern<KeyPressEventArgs>(this, "KeyPress")
.Select(k => k.EventArgs.KeyChar)
.GroupBy(k => k);
// Increment key counter and update user's display
groupedKeyPresses.Subscribe(keyPressGroup =>
{
var numPresses = 0;
keyPressGroup.Subscribe(key => UpdateKeyPressStats(key, ++numPresses));
});
Run Code Online (Sandbox Code Playgroud)
这可以完美地工作/运行,在KeyPress事件中流,按键推送组,然后跟踪每个键被按下的次数,并UpdateKeyPressStats
使用键和新的按键数调用方法.装运它!
但是,FromEventPattern
由于对事件的字符串文字引用,我不是签名的粉丝.所以,我想我会尝试一下FromEvent
.
// Create an observable from key presses, grouped by the key pressed
var groupedKeyPresses = Observable.FromEvent<KeyPressEventHandler, KeyPressEventArgs>(h => this.KeyPress += h, h => this.KeyPress -= h)
.Select(k => …
Run Code Online (Sandbox Code Playgroud) 我正在使用log4net DebugAppender(或TraceAppender).我已经配置了这样的appender:
<appender name="DebugAppender" type="log4net.Appender.DebugAppender">
<immediateFlush value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level %message%newline" />
</layout>
</appender>
Run Code Online (Sandbox Code Playgroud)
代码中的记录器以通常的每类方式声明:
private static readonly ILog Log =
LogManager.GetLogger(typeof(TradingApiRouteCollectionExtensions));
Run Code Online (Sandbox Code Playgroud)
"输出"窗口中的输出如下所示:
Acme.Common.Configuration.TradingApiRouteCollectionExtensions:DEBUG为服务注册路由前缀'session'Acme.Session.SessionService Acme.Common.Configuration.TradingApiRouteCollectionExtensions:为类型Acme.Session.SessionService找到的DEBUG Web方法:Acme.Common.Configuration.TradingApiRouteCollectionExtensions:调试会议/
注意每行是如何以记录器类型名称开头的.我想压制这个,因为我没有在配置中要求它,我不想要它.我看不出任何明显的方法来做到这一点.可能吗?
我有错误:
“error: Sparse checkout leaves no entry on the working directory”
Run Code Online (Sandbox Code Playgroud)
当试图在Windows上的git中设置稀疏结账时.在研究了这个问题并找到了完整的答案后,我已经回答了我自己的问题.
我正在研究使用Observable.Generate来创建一系列结果,这些结果是以msdn网站上的示例为起点间隔采样的.
以下代码没有TimeSpan选择器不会出现内存泄漏:
IObservable<string> obs = Observable.Generate(initialState: 1,
condition: x => x < 1000,
iterate: x => x + 1,
resultSelector: x => x.ToString());
obs.Subscribe(x => Console.WriteLine(x));
Run Code Online (Sandbox Code Playgroud)
但是,以下代码与TimeSpan选择器显示内存泄漏:
TimeSpan timeSpan = TimeSpan.FromSeconds(1);
IObservable<string> obs = Observable.Generate(initialState: 1,
condition: x => x < 1000,
iterate: x => x + 1,
resultSelector: x => x.ToString(),
timeSelector: x => timeSpan);
obs.Subscribe(x => Console.WriteLine(x));
Run Code Online (Sandbox Code Playgroud)
例如,这个玩具应用程序将使用VS 2015社区附带的Memory Profiler快速显示内存泄漏:
using System;
using System.Reactive.Linq;
namespace Sample
{
public class Program
{
static void Main()
{
IObservable<string> obs = …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个包含大量运算符的复杂Reactive Extensions查询.我怎么能看到发生了什么?
我提出并回答这个问题,因为它很有用,而且可能是很好用的.
这是一个相当直接的装饰器模式场景,其复杂性在于,装饰类型具有一个构造函数参数,该参数取决于它被注入的类型.
我有这样的界面:
interface IThing
{
void Do();
}
Run Code Online (Sandbox Code Playgroud)
这样的实现:
class RealThing : IThing
{
public RealThing(string configuration)
{
... implementation ...
}
public void Do()
{
... implementation ...
}
}
Run Code Online (Sandbox Code Playgroud)
像这样的装饰者:
class DecoratingThing : IThing
{
IThing _innerThing;
public DecoratingThing(IThing thing)
{
_innerThing = thing;
}
public void Do()
{
_innerThing.Do();
}
}
Run Code Online (Sandbox Code Playgroud)
最后,我有一些类型的需要IThing
,叫Depender1
,Depender2
等.
class DependerX()
{
public DependerX(IThing thing)
{
... implementation ...
}
}
Run Code Online (Sandbox Code Playgroud)
我想配置一个IOC容器来解析DependerX
它们被注入RealThing
装饰的实例DecoratingThing
. …
c# dependency-injection ioc-container inversion-of-control unity-container
我很乐意在调用内部处理程序的SendAsync()之前执行同步工作,并在内部处理程序完成后执行同步工作.例如:
protected override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken)
{
// do some sync work before inner handler here
var sendTask = base.SendAsync(request, cancellationToken);
return sendTask.ContinueWith(
task => { // do some sync work afterwards here });
}
Run Code Online (Sandbox Code Playgroud)
但是,我现在需要从委托处理程序中调用IO绑定操作.IO绑定操作已经被包装为a Task<bool>
.我需要使用结果来确定是否继续使用内部处理程序.
一个例子是进行网络调用以授权请求.我必须这样做才能与现有系统集成.一般来说,我认为这个问题有一些有效的方案,它应该有一个可行的解决方案.
在这种情况下,实现SendAsync的正确方法是什么,以便我异步执行IO绑定任务,然后继续异步执行内部处理程序?
关键是我想确定请求线程在任何时候都不会被阻塞.
c# ×7
.net ×2
asp.net ×1
asp.net-mvc ×1
debugging ×1
git ×1
log4net ×1
long-integer ×1
powershell ×1
timer ×1
trace ×1
unit-testing ×1
windows ×1
winforms ×1