这个任何帮助非常感谢...企业库日志记录和任务并行库 - 从单独的线程写入日志?
我有一个WPF应用程序,我试图利用企业库(v5)日志记录功能来捕获某些事件。该应用程序都是.Net 4.0。
我有几个长时间运行的进程,并在必要时使用任务并行库进行多线程。我使用Task.Factory.StartNew语法,并有几个延续来控制流。
事件链完成后调用我在UI线程上运行的方法,允许我调用各种UI组件等。 Wtihin这种方法,我也试图写入我的日志...和应用程序简单地挂起。
总结:
1)我有一个静态的“记录”类,让我来解决Logger实例与通常的方法:
public static void LogThis(string message)
{
LogWriter logWriter = EnterpriseLibraryContainer.Current.GetInstance<LogWriter>();
logWriter.Write(message, "My Default Logging Category");
}
2)我有一个任务厂调用揭开序幕我的长期运行的工作:
...
var longProcess = Task.Factory.StartNew(() => ThisMethodTakesAWhile(variable));
...
3)这个任务完成后,通过延续,我的“包东西”方法的调用:
...
// longProcess is the task coming out of the Factory call in point 2.
// We use the Current Sync Context to allow us to come back to the UI thread.
longProcess.ContinueWith(ant => WrapThingsUp(ant.Result), CancellationToken.None, TaskContinuationOptions.NotOnFaulted, TaskScheduler.FromCurrentSynchronizationContext());
...
4)我的“包扎事情”的方法尝试登录:
private void WrapThingsUp(string resultOfLongProcess)
{
//This call locks the applicaiton.
LogThis("Just to let you know I've finished that long task");
// I never get here!
}
我的记录被构造成定位的滚动平面文件,在本地文件夹。来自UI线程的任何调用都可以正常工作。它似乎只是来自TPL外面的电话锁定。
我看了一下不能够写从多个源同时存在于单个文件(我没有试图做的,我保证在上面说什么都没点4试图登录)的文章。
我也看到了有关线程安全的文章here,我不知道这是否是相关的。
编辑:我也尝试调用日志写明确写here,这是在StackOverflow文章here pinping。
编辑:我确信这是与UI/Dispatcher相关的,因为右键单击应用程序任务栏上的项目会“唤醒”它。
如果我可以添加更多的细节,请让我知道。
我想补充一点,我创建了一个小的应用程序,以重新创建此,和往常一样很努力这样做!问题出现的应用程序要大得多,TPL用法更多 - 我假设某处我没有正确处理线程或同步上下文。 – Nick