我有一个连续运行的Windows服务,并创建一些线程来做一些工作.我想确保妥善处理这些线程(完成后收集垃圾).
但是,我也希望能够检查它们是否定期存活并且如果存在则终止它们.我知道我不能保留对它们的任何引用,因为那时它们不会被垃圾收集.
是否有另一种方法来检查用户定义线程的存在/状态?我想的可能是以下使用的东西WeakReference:(我现在无法完全测试,或者我只是自己测试)
List<WeakReference> weakReferences;
Thread myThread = new Thread(() => Foo());
WeakReference wr = new WeakReference(myThread);
weakReferences.Add(wr); //adds a reference to the thread but still allows it to be garbage collected
myThread.Start();
myThread = null; //get rid of reference so thread can be garbage collected
Run Code Online (Sandbox Code Playgroud)
然后在我的onTimeElapsed事件开始时(每5分钟运行一次):
foreach(WeakReference wr in weakReferences)
{
Thread target = wr.Target as Thread; //not sure if this cast is really possible
if(target.IsAlive && otherLogic)
{
target.Abort();
{
}
Run Code Online (Sandbox Code Playgroud)
但我不确定WeakReference是如何工作的.关于如何正确地做到这一点的任何想法?
我有一些代码来添加电子邮件的附件.我是通过类构造函数的Stream重载添加它们的Attachment.执行此操作的代码如下所示:
List<UploadedDocument> docs = DataBroker.GetUploadedDocs(Convert.ToInt32(HttpContext.Current.Session["offer_id"].ToString()));
//no need to keep this in session
HttpContext.Current.Session["offer_id"] = null;
int counter = 1;
foreach (UploadedDocument doc in docs)
{
stream = new MemoryStream(doc.doc);
attach = new Attachment(stream, "Attachment-" + counter.ToString());
message.Attachments.Add(attach);
}
Run Code Online (Sandbox Code Playgroud)
doc.doc字节数组在哪里.我想正确处理每一个附件和流的,但我不能这样做,直到该消息已发送,所以我想只是将其添加到List<Attachment>和List<Stream>,然后通过迭代和呼叫处理.
像这样的东西:
List<Attachment> attachments;
List<Stream> streams;
//...
foreach(UploadedDocument doc in docs)
{
stream = new MemoryStream(doc.doc);
streams.Add(stream);
attach = new Attachment(stream,"Name");
attachments.Add(attach);
message.Attachments.Add(attach);
}
//other processing
emailClient.Send(message);
if(attachments != null)
{
foreach(Attachment attachment …Run Code Online (Sandbox Code Playgroud) 我一直在研究一些代码.我有一个问题:
这两个代码有什么区别?
using (FORM formExemple = new FORM ())
{
formExemple.ShowDialog();
}
Run Code Online (Sandbox Code Playgroud)
和
FORM formExemple = new FORM ();
formExemple.ShowDialog();
Run Code Online (Sandbox Code Playgroud) 当涉及到游戏框架时,我只是有点困惑.我已经弄清楚了所有的一切,但似乎每天都会出现新的东西.
无论如何,今天的事情是这样的:我的scala模板代码在我的渲染文档中显示为纯文本.也许它的语法错误,也许它的播放1.0语法,我不知道.模板看起来像这样:
@(model : models.Menu)
@main("Bearings") {
<div id="bearings_container">
<div id="menu">
<ul id="firstLevel">
#{list items:model.items,as:'menuItem'}
<li id="${menuItem.name}" class="firstLevel">${menuItem.name}</li>
<ul id="${menuItem.name}- submenu">
#{list items: menuItem.subMenu, as:'subMenuItem'}
<li id="${subMenuItem.name}" class="secondLevel">${subMenuItem.name}</li>
<ul id="${subMenuItem.name}- submenu">
#{list items: subMenuItem.subMenu, as:'subSubMenuItem'}
<li id="${subSubMenuItem.name}" class="thirdlevel">${subSubMenuItem.name}</li>
#{/li}
</ul>
#{/li}
</ul>
#{/li}
</ul>
</div>
</div>
}
Run Code Online (Sandbox Code Playgroud)
我确信这很简单.有任何想法吗?
编辑:这是控制器动作:
public static Result bearings()
{
Menu menu = BuildMenu();
return ok(views.html.bearings.render(menu));
}
Run Code Online (Sandbox Code Playgroud)
结果就是上面代码的直接HTML结果.