我遇到过在Win 2008R2服务器上部署.Net(C#)服务的情况.该服务依赖于MSMQ.在关机时,它需要在终止之前发送几条快速消息.这适用于手动触发的OnStop()事件,但是当服务器关闭并且SCM调用OnShutdown()时,我发现MSMQ已经关闭,我的服务无法正常清理.我的服务只需2-5秒即可完成.
我理解(现在)服务依赖只适用于启动,所以这没有帮助.今天我花了一些时间试图找出如何注册我的服务以接受新的(自Vista之后)可用的SERVICE_ACCEPT_PRESHUTDOWN事件并使用PreShutDownOrder功能(http://blogs.technet.com/b/askperf/archive/2008/ 02/04/ws2008-service-shutdown-and-crash-handling.aspx),但据我所知,在框架中实现的ServiceBase不支持此功能.
我沿着尝试使用SetServiceStatus()函数手动设置它的路径,但它似乎不起作用.
_serviceHandle = this.ServiceHandle;
SERVICE_STATUS serviceStatus = new SERVICE_STATUS();
serviceStatus.currentState = (int)State.SERVICE_RUNNING;
serviceStatus.controlsAccepted = (int)(ControlsAccepted.SERVICE_ACCEPT_PRESHUTDOWN | ControlsAccepted.SERVICE_ACCEPT_STOP);
serviceStatus.waitHint = 0;
serviceStatus.checkPoint = 0;
bool setStatus = SetServiceStatus(_serviceHandle, ref serviceStatus);
int error = Marshal.GetLastWin32Error();
调用时,返回错误状态13 GetLastError();
关于如何挂钩preshutdown服务事件的任何想法?
随着Windows Phone Toolkit的最新更新,他们对Mango版本的LongListSelector的内部进行了全面检查.其中一个更改是删除对该GetItemsInView()函数的支持(它现在返回一个空列表).此功能先前返回了当前在屏幕上可见的项目列表.当我离开页面时,我正在使用它来获取对最顶层可见项的引用,以便我可以通过使用支持在墓碑之后恢复ScrollTo(object item).
有谁知道建议的替代方案是什么?我知道,芒果墓碑不是一个问题,但我仍然想支持它,并且可能还有其他一些场景,我想要回想起滚动位置.在某些情况下,我的列表包含数千个项目.
silverlight-toolkit windows-phone-7 windows-phone-7.1 longlistselector
我正在尝试使用WP7 Silverlight Toolkit中的LongListSelector控件.这需要一些工作,但我终于让它与我的应用程序一起工作.不幸的是,我在处理墓碑过程时遇到了一些麻烦.
当应用程序逻辑删除(或用户通过选择列表中的项目导航到另一个页面)时,我保存列表中最顶层可见项目的副本.我将它保存到类变量和app状态集合中.
ICollection<object> visibleItems = myLongList.GetItemsInView();
_lastItem = null;
if (visibleItems.Count > 0)
    _lastItem = visibleItems.First();
IDictionary<string, object> state = 
              Microsoft.Phone.Shell.PhoneApplicationService.Current.State;
state["IndexByName_LastTopItem"] = _lastItem;
然后,当用户返回页面时,我检查两个值之一(状态或变量)并使用它来恢复最后一个滚动位置.
if (_lastItem == null) 
{ 
    if (state.ContainsKey("IndexByName_LastTopItem")) 
    { 
        _lastItem = state["IndexByName_LastTopItem"] as Chemical; 
    } 
} 
if (_lastItem != null) 
    Dispatcher.BeginInvoke(() => { myLongList.ScrollTo(_lastItem); }); 
除非应用程序墓碑,否则这很有用.在这种情况下,我没有收到任何错误,但列表完全空白,直到我触摸并拖动.一旦我这样做,它会重新显示在列表的顶部.我看了一下控件的来源,发现当你调用.ScrollTo(对象)时,它没有得到匹配.进一步调查发现,在搜索要滚动的项目时,使用==而不是等于进行比较.我只覆盖了Equals,显然默认==比较(按设计)引用.在逻辑删除后恢复状态项时,引用不匹配.我可以覆盖==,但这感觉不对.我可以改变并重建控制源来调用equals(我试过并且它有效),但它是由比我更聪明的人写的,我想知道我是不是得到它.有没有更好的办法?