GVKun编程网logo

Win服务暂停或停止时,继续任务的最佳方式是什么?(win服务暂停或停止时,继续任务的最佳方式是什么)

12

在本文中,我们将为您详细介绍Win服务暂停或停止时,继续任务的最佳方式是什么?的相关知识,并且为您解答关于win服务暂停或停止时,继续任务的最佳方式是什么的疑问,此外,我们还会提供一些关于c#–为枚举

在本文中,我们将为您详细介绍Win服务暂停或停止时,继续任务的最佳方式是什么?的相关知识,并且为您解答关于win服务暂停或停止时,继续任务的最佳方式是什么的疑问,此外,我们还会提供一些关于c# – 为枚举提供本地化的最佳方式是什么?、c# – 传递流的最佳方式是什么?、HTML – 在网站上提供视频的最佳方式是什么?、java – 在JPA中更新实体的最佳方式是什么?的有用信息。

本文目录一览:

Win服务暂停或停止时,继续任务的最佳方式是什么?(win服务暂停或停止时,继续任务的最佳方式是什么)

Win服务暂停或停止时,继续任务的最佳方式是什么?(win服务暂停或停止时,继续任务的最佳方式是什么)

所以我设法写这个服务,现在工作很好。 我想确保在处理数据库logging时,以及由于某种原因,如果服务暂停或closures,应该完成任务,而不是使数据不一致。

我已经尝试了下面的代码,但是我觉得它可能不是正确的,万一它可能不是最好的。 我怎样才能改善上述情况下的代码?

protected override void OnStart(string[] args) { // Update the service state to Start Pending. ServiceStatus serviceStatus = new ServiceStatus(); serviceStatus.dwCurrentState = ServiceState.SERVICE_START_PENDING; serviceStatus.dwWaitHint = 100000; SetServiceStatus(this.ServiceHandle,ref serviceStatus); _eventLog.WriteEntry("RMS Service Started: " + DateTime.UtcNow.ToLongDateString()); CheckDBEntryData(); _timer = new System.Timers.Timer(); _timer.Interval = 60000; _timer.Elapsed += new System.Timers.ElapsedEventHandler(this.SendScheduledSMS); _timer.Start(); // Update the service state to Running. serviceStatus.dwCurrentState = ServiceState.SERVICE_RUNNING; SetServiceStatus(this.ServiceHandle,ref serviceStatus); } public void SendScheduledSMS(object sender,System.Timers.ElapsedEventArgs e) { if (!_isTaskRunning) { _timer.Enabled = false; _isTaskRunning = true; _eventLog.WriteEntry("RMS Timer Event started: " + DateTime.UtcNow.ToLongDateString()); //Todo: Write the code to check pending RMS and process them _eventLog.WriteEntry("RMS Timer Event stopped: " + DateTime.UtcNow.ToLongDateString()); _isTaskRunning = false; _timer.Enabled = true; } } protected override void OnStop() { CanStop = !_isTaskRunning; // Update the service state to Stop Pending. ServiceStatus serviceStatus = new ServiceStatus(); serviceStatus.dwCurrentState = ServiceState.SERVICE_STOP_PENDING; serviceStatus.dwWaitHint = 100000; SetServiceStatus(this.ServiceHandle,ref serviceStatus); _eventLog.WriteEntry("RMS Service Stopped: " + DateTime.UtcNow.ToLongDateString()); // Update the service state to Stopped. serviceStatus.dwCurrentState = ServiceState.SERVICE_STOPPED; SetServiceStatus(this.ServiceHandle,ref serviceStatus); }

更多信息

服务正在处理数据库logging并将数据传递给第二个远程服务器,负责向用户发送短信通知。 我需要确保通知只发送一次。 如果我使用事务,并且最后一条logging发生回滚,则下一次处理开始时,它将从头开始发送通知,从而发送重复通知。 所以我不能依靠数据库事务模式,因为我无法控制第二台远程服务器。

wpf窗口位置的问题

获取从VB.NET中的电子邮件附件复制到剪贴板的文件的名称

当创build一个新线程时,对GUI的更改没有被制作(C#)

.net File.copy复制许多小文件时(非networking)很慢,

File.Exists对不存在的文件返回true

蓝牙服务器应用程序接受移动设备的连接

在.NET中获取默认的Windows系统颜色

在线程中调用列表框

是一个迷你转储有用的.NETdebugging

检查“服务器”服务是否正在运行 – 多语言C#.Net

该服务可以随时停止。 它可能会崩溃,或者电源可能被中断。 在上述任何情况下,结果应该是一致的。 这就是为什么在与数据库交互时使用事务:当数据库处于一致状态时提交。 如果发生中断(崩溃,SCM停止,掉电,任何事情),数据库将回滚到先前的一致状态。

你完全咆哮错误的树试图修复SCM交互。 你的重点应该围绕数据库工作,确保你的交易界限是正确的。

serviceStatus.dwCurrentState = ServiceState.SERVICE_STOP_PENDING; serviceStatus.dwWaitHint = 100000; SetServiceStatus(this.ServiceHandle,ref serviceStatus);

在完成任何现有任务的同时,您需要定期设置服务状态,并等待适当的提示。

“定期”在这里需要一些猜测,但是经常需要足够的时间来确保服务控制管理者不会将服务视为不关闭。 在过去,我每隔几秒就做一次,没有问题。

如果你有任何需要花费很长时间(几十秒)完成的事情,你真的需要重新构造,以便在服务重启时恢复(请记住,关机可能是因为系统即将失去电力或以其他方式需要尽快停止)。

c# – 为枚举提供本地化的最佳方式是什么?

c# – 为枚举提供本地化的最佳方式是什么?

我正在编写一个使用很多枚举的多语言应用程序,我希望实现以下目标:

>将枚举名称显示为本地化字符串
>使用属性提供本地化描述
>启用对枚举的语言敏感解析回到int值

我热衷于使用资源文件属性来装饰枚举,以便可以从运行时类型信息中获取本地化字符串.在使用静态成员而不是枚举声明静态类之前,我一直沿着这条路走下去,但是这解决了很多问题.

某种基于TypeDescriptor的机制是否合适?甚至可能吗?

此外 – 如何以干净,通用,可重复使用的方式完成目标#3?

自从提出这个问题以来,我已经完成了需要可本地化的枚举显示的开源库.我选择了实现TypeConverters的技术.完整资源来源于http://measures.codeplex.com/

解决方法

为你的枚举写 TypeConvertor怎么样?

>定义一些自定义属性,该属性将标识枚举值的资源字符串.>编写TypeConvertor,它将查找此属性以获取资源ID,然后将该值转换为字符串. (您可以使用相同的辅助类,但使用TypeConvertor和TypeConvertorAttribute允许更透明地使用它).>您可以编写一个将执行反向转换的通用类/方法(从字符串到枚举).该方法将类似于Parse< T>(字符串值),其中T将是枚举类型.该实现将使用反射构建(按需)给定枚举类型T的查找字典以查找您的自定义属性.

c# – 传递流的最佳方式是什么?

c# – 传递流的最佳方式是什么?

我试图传递流作为参数,但我不确定哪种方式是“最好的”所以我想听听你对我的代码示例的意见/建议

我个人更喜欢选项三,但我更新看到它在其他地方以这种方式完成.

选项1适用于小流(以及已知大小的流)

选项2_1和2_2总是让“管理员”怀疑谁有责任处置/关闭.

public interface ISomeStreamHandler
{
    // Option 1
    void HandleStream(byte[] streamBytes);

    // Option 2
    void HandleStream(Stream stream);

    // Option 3
    void HandleStream(Func<Stream> openStream);
}


public interface IStreamProducer
{
    Stream GetStream();
}



public class SomeTestClass
{
    private readonly ISomeStreamHandler _streamHandler;
    private readonly IStreamProducer _streamProducer;

    public SomeTestClass(ISomeStreamHandler streamHandler,IStreamProducer streamProducer)
    {
        _streamHandler = streamHandler;
        _streamProducer = streamProducer;
    }

    public void DoOption1()
    {
        var buffer = new byte[16 * 1024];
        using (var input = _streamProducer.GetStream())
        {
            using (var ms = new MemoryStream())
            {
                int read;
                while ((read = input.Read(buffer,buffer.Length)) > 0) 
                {
                    ms.Write(buffer,read);
                }
                _streamHandler.HandleStream(ms.ToArray());
            }
        }
    }

    public void DoOption2_1()
    {
        _streamHandler.HandleStream(_streamProducer.GetStream());
    }

    public void DoOption2_2()
    {
        using (var stream = _streamProducer.GetStream())
        {
            _streamHandler.HandleStream(stream);    
        }
    }


    public void DoOption3()
    {
        _streamHandler.HandleStream(_streamProducer.GetStream);
    }
}

解决方法

选项2_2是处理可支配资源的标准方式.

您的SomeTestClass实例向生产者询问流 – 然后SomeTestClass拥有一个流并负责清理.

选项3和2_1依赖于不同的对象来清理SomeTestClass拥有的资源 – 可能无法满足此期望.

选项1是将流的内容复制到另一个流 – 我没有看到这样做的任何好处.

HTML – 在网站上提供视频的最佳方式是什么?

HTML – 在网站上提供视频的最佳方式是什么?

我想在我的网站上发布一些视频.它们以.MP4文件的形式提供,这些文件来自FlipShare相机.

现在我尝试将它们转换为WMV(成功了,但是当嵌入html中的< object id ='mediaPlayer'width ='320'height ='285'classid ='CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95 'etc'标签,用户必须安装插件,并且网站上10个Windows Media Player的用户体验不仅如此之好.)

所以我看了youtube并想知道他们是怎么做的,但我无法弄清楚他们将视频转换成什么格式.

所以我的问题是:我将视频转换为什么格式,以便在不需要安装在用户浏览器中的播放器中显示.我需要什么工具以及嵌入此类视频的HTML代码是什么?

如您所见:从头开始.

PS:我经常听到:这个或那个文件扩展名只是一个容器,里面可以有任何东西.如果你在答案中使用了这个,你可以向我解释一下,因为我从来没有理解这一点.对我来说,.cs是一个c#文件,而.doc是一个Word文件,而不是’一个容器’.

解决方法

我说目前最受欢迎的解决方案 – 由YouTube和其他主要视频门户网站使用 – 是H.264编码的基于Flash的视频. Flash可以播放视频,因为…我认为版本8或9,并从此获得了显着的市场份额.

我个人最喜欢的Flash播放器是LongTail Player,但它不能免费用于商业用途.

Here是一个SO问题,包含基于Flash的播放器列表,包括开源播放器.

但Flash不会在iPhone和iPad上播放.

如果你想支持使用Flash Player 9的计算机(我已经看过一些,但我没有任何硬编号)你将需要编码FLV文件(我认为使用一个名为Sorenson的编解码器).

即将推出的替代方案是HTML 5 Video,但在浏览器中支持这种方式并不是主要的市场份额.

java – 在JPA中更新实体的最佳方式是什么?

java – 在JPA中更新实体的最佳方式是什么?

我正在使用JPA进行一些CRUD操作.要更新一个正确的方法吗?

通过更新查询或通过查找EntityManager的方法?
我有一个我需要更新的Employee对象.哪个是正确的方法?为方便起见,find方法很好,所以我使用了find()方法.

请指导我

解决方法

在Query API上使用executeUpdate()更快,因为它绕过了持久化上下文.然而,旁路持久上下文会导致内存中的实例状态,DB中该记录的实际值不会同步.

请考虑以下示例:

Employee employee= (Employee)entityManager.find(Employee.class,1);
 entityManager
     .createquery("update Employee set name = \'xxxx\' where id=1")
     .executeUpdate();

刷新后,DB中的名称将更新为新值,但内存中的员工实例仍保持原始值.您必须调用entityManager.refresh(employee)才能将更新的名称从DB重新加载到员工实例.如果您的代码仍然需要在刷新后运算符工实例,但您忘记刷新()员工实例,因为员工实例仍然包含原始值,这听起来很奇怪.

通常,在批量更新过程中使用executeUpdate(),因为它更快,因为绕过持久上下文

更新实体的正确方法是,您只需设置要通过设置器更新的属性,并让JPA在刷新期间生成更新sql,而不是手动编写.

Employee employee= (Employee)entityManager.find(Employee.class,1);
   employee.setName("Updated Name");

我们今天的关于Win服务暂停或停止时,继续任务的最佳方式是什么?win服务暂停或停止时,继续任务的最佳方式是什么的分享已经告一段落,感谢您的关注,如果您想了解更多关于c# – 为枚举提供本地化的最佳方式是什么?、c# – 传递流的最佳方式是什么?、HTML – 在网站上提供视频的最佳方式是什么?、java – 在JPA中更新实体的最佳方式是什么?的相关信息,请在本站查询。

本文标签: