我有一个ClickOnce应用程序,我需要能够将URL参数传递给它.例如,用户可以单击"http://foo.bar/MyApp.application?flavor=grape"形式的URL,这将启动我的应用程序,将"?flavor = grape"查询传递给它.
不幸的是,看起来这只适用于IE开箱即用.在Firefox和Chrome上,用户必须安装附加组件才能使ClickOnce部署正常运行.我的用户在限制性企业环境中工作,不允许安装任何附加组件或其他任何东西(ClickOnce确实适用于他们).那么,我该怎么办?
我能想到的一个hack是将我的应用程序注册为文件处理程序,用于一些足够独特的文件扩展名,例如".bugmaster".然后 - 或者我的理论去了 - 我可以让我的网络服务器生成一个名为"flavor_grape.bugmaster"的文件; 用户将单击指向该文件的URL,然后选择"运行"而不是"保存",这将启动我的应用程序,然后他将解析URL参数的文件名.不幸的是,这种方法也不起作用.当从本地文件系统打开"flavor_grape.bugmaster"文件时,它完全正常,但由于某种原因,当用户尝试从浏览器打开文件时,这不起作用.
有没有人有任何其他想法?
我正在设计一个由多个块组成的长时间运行的Dataflow管道.项目被输入到管道的输入块,最终通过它,并在最后的UI中显示(作为对用户的礼貌 - 管道的真正工作是将处理结果保存到磁盘).
由于各种原因(输入错误,网络故障,计算错误等),管道块内的lambda函数可能会抛出异常.在这种情况下,我不想破坏整个管道,而是想要触发违规项目,并在"错误"下的UI中显示它.
最好的方法是什么?我知道我可以在try/catch中包装每个lambda函数:
var errorLoggingBlock = new ActionBlock<Tuple<WorkItem, Exception>>(...)
var workerBlock = new TransformBlock<WorkItem, WorkItem>(item =>
{
try {
return DoStuff(item);
} catch (Exception ex) {
errorLoggingBlock.SendAsync(Tuple.Create(item, ex));
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
但是我在管道中有大约10个块,并且将代码复制/粘贴到每个块中似乎很愚蠢.此外,我不喜欢返回null的想法,因为现在所有下游块都必须检查它.
我的下一个最好的想法是创建一个函数,返回一个为我做包装的lambda:
private Func<TArg, TResult> HandleErrors<TArg, TResult>(Func<TArg, TResult> f) where TArg:WorkItem
{
return arg =>
{
try {
return f(arg);
} catch (Exception ex) {
errorLoggingBlock.SendAsync(Tuple.Create(item, ex));
return default(TResult);
}
};
}
Run Code Online (Sandbox Code Playgroud)
但这似乎有点过分.有没有更好的办法 ?
我正在构建一个Dataflows管道,它的工作就是处理大文件.每个文件都经过解析,分析和渲染; 但是每个文件可能在管道中采用不同的路径,具体取决于它是什么类型的文件.
此管道的用户界面包含要处理的文件列表,以及进度条和每个文件旁边的"取消"按钮(当然,还有一个用于向队列添加新文件的按钮).当用户单击特定文件旁边的"取消"按钮时,我想从管道中删除该文件.
我必须遗漏一些东西,因为我无法弄清楚如何做到这一点.我知道我可以取消整个块,但我不想这样做,我只想取消管道中的单个项目.那么,我错过了什么?
我在Hibernate论坛上问过这个问题,但没有得到完整的答复,所以我想我会在这里重新发布.这是原始问题主题:
http://forum.hibernate.org/viewtopic.php?f=1&t=1008243&p=2438963#p2438963
简而言之,我有一个自定义HQL查询将两个完全不相关的表连接在一起,我试图通过禁用加载我的Hibernate映射中存在的关联集合来防止"O(N + 1)选择"问题的POJO.
显然,我可以使用Hibernate 获取配置文件,但有一个障碍.这是Hibernate的FetchMode.java所说的:
/**
* Fetch using an outer join. Equivalent to <tt>fetch="join"</tt>.
*/
public static final FetchMode JOIN = new FetchMode("JOIN");
/**
* Fetch eagerly, using a separate select. Equivalent to
* <tt>fetch="select"</tt>.
*/
public static final FetchMode SELECT = new FetchMode("SELECT");
/**
* Fetch lazily. Equivalent to <tt>outer-join="false"</tt>.
* @deprecated use <tt>FetchMode.SELECT</tt>
*/
public static final FetchMode LAZY = SELECT;
Run Code Online (Sandbox Code Playgroud)
所以,"LAZY"并不是很懒,它只是"SELECT",这正是我想要避免的.
是否有一个提取模式可以防止加载集合?如果没有,是否有其他方法可以在特定HQL查询过程中禁用集合加载?
我意识到实现这一点的传统方法是使用Criteria查询,但我需要对任意属性进行连接,据我所知,没有Criteria.
我有一个数字列表,我写了一个方法,对这些数字进行一些计算; 总而言之,它是关于一页代码的.该方法对这些数字进行一些算术和比较.
我的问题是,在一种情况下,列表是一个IList<byte>,而在另一种情况下,它是一个IList<float>.两种情况下的算法完全相同(是的,我知道溢出错误和精度损失等问题,但在我的情况下它可以工作).如何编写一个可以处理这两个列表的方法?我不能写类似void的东西DoStuff<T>(IList<T> numbers),因为没有+ - * /通用的算术运算符().
一种解决方案是简单地将所有内容存储为浮动,但我想避免它.列表很长,因此存储浮点数而不是字节会花费太多内存.我也可以做类似的事情DoStuffFloat(byteList.Select(b => (float)b)),但我也不想支付性能损失,如果我可以避免它.
没有复制粘贴整个方法并将"浮动"替换为"字节"(反之亦然),是否有一些不错的解决方案?
编辑:我应该提到我限制在这个项目中使用.NET 3.5.
c# ×3
.net ×2
tpl-dataflow ×2
cancellation ×1
clickonce ×1
deployment ×1
generics ×1
hibernate ×1
java ×1
lazy-loading ×1
math ×1
orm ×1
url ×1