小编Phi*_*idt的帖子

线程和垃圾收集

我有一个连续运行的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是如何工作的.关于如何正确地做到这一点的任何想法?

c# multithreading garbage-collection weak-references

1
推荐指数
1
解决办法
1983
查看次数

在对IDisposable的引用上调用dispose()

我有一些代码来添加电子邮件的附件.我是通过类构造函数的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)

c# email idisposable attachment

1
推荐指数
1
解决办法
231
查看次数

使用"using"实例化和简单实例化之间有什么区别

我一直在研究一些代码.我有一个问题:

这两个代码有什么区别?

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)

c#

0
推荐指数
3
解决办法
149
查看次数

渲染Play框架2视图

当涉及到游戏框架时,我只是有点困惑.我已经弄清楚了所有的一切,但似乎每天都会出现新的东西.

无论如何,今天的事情是这样的:我的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结果.

java scala playframework playframework-2.0

0
推荐指数
1
解决办法
6149
查看次数