我正在使用一个框架,该框架在一个单独的线程中运行自己的事件调度程序.框架可能会生成一些事件.
class SomeDataSource {
public event OnFrameworkEvent;
void FrameworkCallback() {
// This function runs on framework's thread.
if (OnFrameworkEvent != null)
OnFrameworkEvent(args);
}
}
Run Code Online (Sandbox Code Playgroud)
我想将这些事件传递给Winforms线程上的Winforms对象.我显然检查InvokeRequired并在必要时将其发送到Winforms线程.
class SomeForm : Form {
// ...
public void SomeAction(SomeArgs args) {
if (InvokeRequired) {
BeginInvoke(new Action(SomeAction), args);
return;
}
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
现在事件可能在表单处于关闭状态时传递,这会导致各种问题,因此我从Winforms线程上的框架事件源取消注册表单的事件处理程序,如下所示:
var form = new SomeForm();
var src = new SomeDataSource();
// ...
src.OnFrameworkEvent += form.SomeAction;
form.Closing += (sender, eargs) => src.OnFrameworkEvent -= form.SomeAction;
Run Code Online (Sandbox Code Playgroud)
现在,这种方法是线程安全的吗?如果表单处于关闭状态,并且外部线程调用BeginInvoke,那么如果表单关闭,调用是否仍会排队等待执行?(这意味着我仍然有机会遇到同样的问题) …
简单的问题:看标题.我正在使用.NET 3.5.
详细说明:我正在构建一个插件,它将在运行时加载到第三方应用程序中.主应用程序使用log4net作为其日志框架.但是,它不会公开根记录器,因此我们无法记录.(我已经向上游开发者提出了这个问题,他们将在未来的版本中修复它,所以在此期间我需要提出其他的东西)
该系统的另一个限制是,当它收到通知它应该加载本地系统上不存在的插件时,它将从连接的服务器(如果它存在于服务器上)下拉该插件,但是它只能拉下插件所在的组件.这意味着没有外部程序集,也不能使用插件部署.config或任何其他文件.
这让我只有内置的.NET程序集和插件程序集中的所有内容.但是,我不想通过建立自己的另一个记录框架来重新发明轮子,所以我想知道这个问题的最佳方法是什么.
我更喜欢登录到文件,并希望避免将内容转储到Windows事件日志中.
CSURLCache旨在缓存资源以进行脱机浏览,因为NSURLCache只将数据存储在内存中.
如果cachedResponse在返回应用程序崩溃之前自动释放,如果没有,则只是泄漏对象.
任何可以照到这上面的光都会非常感激.
请注意stringByEncodingURLEntities是一种类别方法NSString.
@interface CSURLCache : NSURLCache {} @end
@implementation CSURLCache
- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request
{
NSString *path = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:[[[request URL] absoluteString] stringByEncodingURLEntities]];
if ([[NSFileManager defaultManager] fileExistsAtPath:path])
{
NSData *data = [[NSData alloc] initWithContentsOfFile:path];
NSURLResponse *response = [[NSURLResponse alloc] initWithURL:[request URL]
MIMEType:nil
expectedContentLength:[data length]
textEncodingName:nil];
NSCachedURLResponse *cachedResponse = [[NSCachedURLResponse alloc] initWithResponse:response
data:data];
[response release];
[data release];
return cachedResponse;
}
return nil;
}
@end
Run Code Online (Sandbox Code Playgroud)
更新:向Apple提交雷达后,似乎这是一个已知问题(雷达#7640470).
作为项目设置过程的一部分,我需要将其中一个软件包符号链接到指定的目录,以便init.d脚本可以找到它.有没有办法将此作为后处理命令添加到setup()?我甚至愿意创建另一个创建链接的文件并将其setup()作为"运行这些"的一些kwarg列表的一部分传递(如果存在这样的选项).
setup(
...
packages = find_packages('src'),
package_dir = {'': 'src'},
install_requires = ...,
data_files = [('/etc/init.d', ['scripts/foo'])],
...
)
Run Code Online (Sandbox Code Playgroud)
该foo脚本期望其中一个包与src/其他地方的符号链接(例如,不是简单地打开PYTHONPATH).有没有办法实现这一目标?
我有一个叫做类的类GraphEdge,我希望set通过它tail和head成员在一个集合(内置类型)中进行唯一定义__init__.
如果我没有定义__hash__,我会看到以下行为:
>>> E = GraphEdge('A', 'B')
>>> H = GraphEdge('A', 'B')
>>> hash(E)
139731804758160
>>> hash(H)
139731804760784
>>> S = set()
>>> S.add(E)
>>> S.add(H)
>>> S
set([('A', 'B'), ('A', 'B')])
Run Code Online (Sandbox Code Playgroud)
该组没有办法知道,E并且H是由我的定义是相同的,因为他们有不同的哈希值(这是什么类型的集合用来确定唯一性,据我所知),所以它增加了两种截然不同的元素.所以我定义了一个相当天真的哈希函数,GraphEdge如下所示:
def __hash__( self ):
return hash( self.tail ) ^ hash( self.head )
Run Code Online (Sandbox Code Playgroud)
现在上面按预期工作:
>>> E = GraphEdge('A', 'B')
>>> H = GraphEdge('A', 'B')
>>> hash(E)
409150083
>>> hash(H)
409150083 …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一些代码来帮助单元测试WCF服务.这些服务通过创建代理实例的facade类访问,然后调用代理方法并返回结果; 对于每种代理方法.我希望能够用创建真实服务或虚假服务的东西替换当前的创建代码.
我无法让它工作.我把它归结为以下内容:
using System.ServiceModel;
namespace ExpressionTrees
{
public interface IMyContract
{
void Method();
}
public class MyClient : ClientBase<IMyContract>, IMyContract
{
public MyClient()
{
}
public MyClient(string endpointConfigurationName)
: base(endpointConfigurationName)
{
}
public void Method()
{
Channel.Method();
}
}
public class Test
{
public TClient MakeClient<TClient>()
where TClient : ClientBase<IMyContract>, IMyContract, new()
{
return new MyClient("config");
// Error:
// Cannot convert expression of type 'ExpressionTrees.ServiceClient' to return type 'TClient'
}
}
}
Run Code Online (Sandbox Code Playgroud)
为什么即使MyClient该类派生ClientBase<IMyContract>并实现IMyContract,我也无法 …
谁能解释下面的编译错误?有趣的是,如果我将方法的返回类型更改get()为String,则代码编译得很好.请注意,该thenReturn方法有两个重载:一元方法和一个至少需要一个参数的varargs方法.在我看来,如果调用在这里是模棱两可的,那么它总是模棱两可的.
更重要的是,有什么方法可以解决歧义吗?
import org.scalatest.mock.MockitoSugar
import org.mockito.Mockito._
trait Thing {
def get(): java.lang.Object
}
new MockitoSugar {
val t = mock[Thing]
when(t.get()).thenReturn("a")
}
Run Code Online (Sandbox Code Playgroud)
错误:对重载定义的模糊引用,两个方法然后返回特征类型
java.lang.Object,java.lang.Object*)org.mockito.stubbing.OngoingStubbing [java.lang.Object]和方法返回特征OngoingStubbing的特征OngoingStubbing type(java.lang.Object)org.mockito.stubbing.OngoingStubbing [java.lang.Object]匹配参数类型(java.lang.String)when(t.get()).thenReturn("a")
我有一个字典,我想在表单中显示.最简单的方法是什么?
我想要显示一个控件,我可以使用int值进行排序.我已经尝试过DataGridView,但没有任何显示,我一定是做错了...
码:
mDataGridView.DataSource = mWordCount;
/*Where mWordCount is the Dictionary<string, int> but nothing shows up. (It's a forms-app, not a web-app)*/
Run Code Online (Sandbox Code Playgroud) 由于某种原因,该"".replace()方法仅替换第一次出现而不替换其他出现.有任何想法吗?
我正在考虑用旋钮,按钮和LED制作物理控制器(设备?).我想使用Java与它进行交互(响应旋钮,点亮LED等).我提到Java的原因有两方面:首先,我认识Java 1.其次,我编写了我需要在Java中与其交互的程序的其余部分(尽管有一些方法可以从另一种语言与Java程序对话).
我希望该设备通过USB连接并独立于(计算机)平台.
除了开始阅读Arduino网站之外,我对从哪里开始没有任何想法.这是我最好/唯一的选择吗?有没有更适合与Java通信的东西?
注意:我知道Arduino与Java有关(不确定是什么),但似乎代码必须写在C的子集中.
我将如何开始讨论这个话题?
1 - 请不要笑.
c# ×3
python ×2
.net ×1
arduino ×1
autorelease ×1
cocoa ×1
controls ×1
dictionary ×1
distribute ×1
generics ×1
hash ×1
java ×1
javascript ×1
log4net ×1
logging ×1
mocking ×1
nsurlcache ×1
objective-c ×1
replace ×1
scala ×1
set ×1
setuptools ×1
show ×1
symlink ×1
wcf ×1
winforms ×1