小编DJM*_*hem的帖子

如何使用OpenFileDialog选择文件夹?

如何用来OpenFileDialog选择文件夹?

我打算使用以下项目:https://github.com/scottwis/OpenFileOrFolderDialog

但是,我遇到了一个问题.它使用GetOpenFileName功能和OPENFILENAME结构.并OPENFILENAME有成员的名字templateID.它是对话框模板的标识符.该项目也包含res1.rc文件和模板化对话框init.但我无法弄清楚如何将此文件附加到我的C#项目.

有没有更好的方法来使用OpenFileDialog选择文件夹?

.net c# dialog openfiledialog

254
推荐指数
8
解决办法
47万
查看次数

std :: mutex vs std :: recursive_mutex作为类成员

我见过有些人讨厌recursive_mutex:

http://www.zaval.org/resources/library/butenhof1.html

但是在考虑如何实现一个线程安全的类(互斥保护)时,我觉得很难证明每个应该受互斥保护的方法都是互斥保护的,并且互斥锁最多被锁定一次.

因此,对于面向对象的设计,应该std::recursive_mutex是默认的并且std::mutex在一般情况下被视为性能优化,除非它仅在一个地方使用(仅保护一个资源)?

为了说清楚,我说的是一个私人非静态互斥体.因此每个类实例只有一个互斥锁.

在每个公共方法的开头:

{
    std::scoped_lock<std::recursive_mutex> sl;
Run Code Online (Sandbox Code Playgroud)

c++ mutex object-design c++11 recursive-mutex

43
推荐指数
3
解决办法
2万
查看次数

"对象发送者"和"EventArgs e"参数有什么用?

在和其他页面事件的情况下Page_Load,Init这些(object sender, EventArgs e)参数的用途是什么?

例子会更有帮助.

c# asp.net

39
推荐指数
2
解决办法
15万
查看次数

为一个未显示的局部变量定义Setter/Getter:不可能?

之前有一些关于StackOverflow的问题,质疑如何通过作用域链访问局部变量,比如你想用括号表示法和字符串引用局部变量,你需要类似的东西__local__["varName"].到目前为止,我还没有找到实现这一目标的最骇客的方法,并且在数小时利用我知道的每一招之后都没有提出一种方法.

它的目的是在任意非实现变量上实现getter/setter.Object.defineProperties或__defineGet/Setter__要求调用上下文.对于全局或窗口上下文中的属性,您可以实现具有用于直接引用对象的setter/getter的目标.

Object.defineProperty(this, "glob", {get: function(){return "direct access"})
console.log(glob); //"direct access"
Run Code Online (Sandbox Code Playgroud)

即使在我与编译成一个改良的铬自定义扩展我之前的任何窗口创建,其内容具有实际全球范围内,甚至试图调用运行测试,this直接在全球范围内崩溃我的程序,我能拉这一关没有一个障碍:

Object.defineProperty(Object.prototype, "define", {
    value: function(name, descriptor){
        Object.defineProperty(this, name, descriptor);
    }
};
define("REALLYglobal", {get: function(){ return "above window context"; }});
Run Code Online (Sandbox Code Playgroud)

然后,它可以在以后创建的所有帧中作为通过指定的getter/setter路由的全局帧.旧的__defineGet/Setter__也适用于该上下文而没有指定要调用它的内容(虽然在Firefox中不起作用,但上面的方法确实如此).

因此,基本上可以为对象上的任何变量定义get/set guard,包括直接调用对象的窗口/全局上下文(您不需要window.propname,只是propname).这是无法引用未填充的范围变量的问题,是唯一可以在可访问范围但没有可寻址容器的类型.当然,它们也是最常用的,所以它不是一个优势.这个问题也超越了ES6/Harmony中Proxies的当前实现,因为它是一个问题,特别是无法使用语言的语法来处理本地对象的容器.

我希望能够做到这一点的原因是,它是允许重载大多数数学运算符以用于复杂对象(如数组和散列)并导出复杂结果值的唯一障碍.如果在我为重载设置的对象类型上设置了值,我需要能够挂钩到setter.没有问题,如果对象可以是全局的,或者可以包含在父对象中,这可能就是我要用的东西.它仍然有用a.myObject,但目标是尽可能透明地使用它.

不仅如此,能够完成这样的事情真的很有用:

var point3d = function(){
    var x, y, z;
    return {
        get: function(){ return [x, y, z]; },
        set: function(vals){ x=vals[0]; y=vals[1]; z=vals[2]; }
    };
};
Run Code Online (Sandbox Code Playgroud)

(这与ES6的解构类似,但具有更多通用应用程序,用于实现获取/设置所附带的功能,而不仅仅是传输复杂的值).即使这个基本代码也会完全失败:

var x …
Run Code Online (Sandbox Code Playgroud)

javascript setter closures scope local

38
推荐指数
2
解决办法
3820
查看次数

vim搜索和替换仅限于可视块模式中的突出显示

我经常在列中添加文本,需要更换一些东西,而不需要在同一行上删除类似的东西...一个简单的例子如下:

vim visual block-mode截图

假设我用vim视觉块模式突出显示灰色文本,并想要替换8081; 但是,我只想在突出显示的视觉块中进行替换.

我已经尝试过Cntlv : s/80/81/g; 但是,它取代了可视块内外的文本.(根据兰迪的反馈,这是因为: s是一个直线命令).

我知道我可以在这个特定的实例中使用直线视觉块替换(Shiftv : s/80\.1/81.1/g); 但是,我试图找到一个通用的解决方案,在非线性视觉块中没有简单的替换方法(这不是视觉块模式应该帮助解决的那种问题吗?).需要确认的答案: s/80/81/gc,不是我要找的.

我将重申对清晰度的问题是:我怎么能代替8081使用vim的视觉块模式的亮点?

vim search replace

25
推荐指数
3
解决办法
6279
查看次数

"Visual Studio组件缓存已过期,请重新启动Visual Studio."

我在Windows 7上,使用Atmel studio 7.0.当我在Atmel Studio中打开我的项目时,它无法加载并发出此错误:

The Visual Studio component cache is out of date please restart visual studio.
Run Code Online (Sandbox Code Playgroud)

当我关闭并重新打开Atmel Studio时,同样的错误仍在继续.我也尝试右键单击我的项目,然后选择"重新加载项目",但后来我收到了这个错误:

Value cannot be null. Parameter name: url
Run Code Online (Sandbox Code Playgroud)

我怎样才能打开我的项目?

atmel visual-studio atmelstudio

18
推荐指数
3
解决办法
3万
查看次数

如何检查机器人是否可以私信用户

如果用户关闭了隐私设置“允许来自服务器成员的直接消息”并且不和谐机器人调用

await user.dm_channel.send("Hello there")
Run Code Online (Sandbox Code Playgroud)

你会得到这个错误:

discord.errors.Forbidden: 403 Forbidden (error code: 50007): Cannot send messages to this user
Run Code Online (Sandbox Code Playgroud)

我想检查是否可以在不发送消息的情况下向用户发送消息。尝试发送消息并捕获此错误对我来说不起作用,因为我不希望在允许机器人发送消息的情况下发送消息

我已经尝试过这个:

print(user.dm_channel.permissions_for(bot).send_messages)
Run Code Online (Sandbox Code Playgroud)

但它总是返回 True,即使该消息是不允许的。

我也尝试过这个:

channel = await user.create_dm()
if channel is None:
    ...
Run Code Online (Sandbox Code Playgroud)

但不幸的是,似乎“有权向用户发送消息”和“有权创建DM频道”被认为是不同的。

编辑

由于似乎有点混乱,为了澄清确切的用法,请看这个例子。有一台服务器和 3 个有问题的用户:我、我的机器人和史蒂夫。Steve 已勾选“允许来自服务器成员的直接消息”。

该机器人有一个名为 的命令!newgame,它接受用户列表并在他们之间启动游戏,其中涉及对游戏中的一些成员进行私聊。由于史蒂夫的隐私设置,他无法玩游戏(因为机器人需要向他发送消息)。如果我做

!newgame @DJMcMayhem @Steve
Run Code Online (Sandbox Code Playgroud)

我想提供这样的回应:

await user.dm_channel.send("Hello there")
Run Code Online (Sandbox Code Playgroud)

但据我目前所知,确定史蒂夫是否可以玩游戏的唯一方法是首先尝试向每个用户发送消息,我想避免这种情况。

python discord discord.py

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

无法在python中加载c ++ DLL

我试图.dll在Python中使用C++ ,但我甚至无法加载它.我正在尝试以下python代码来加载它:

from ctypes import cdll
mydll = cdll.LoadLibrary('SORT_DLL.dll')
Run Code Online (Sandbox Code Playgroud)

但当我尝试运行时,我得到:

D:\...\src\SORT_DLL\Debug>UseDll.py
Traceback (most recent call last):
  File "D:\...\src\SORT_DLL\Debug\UseDll.py", line 2, in
 <module>
    mydll = cdll.LoadLibrary('SORT_DLL.dll')
  File "C:\Python27\lib\ctypes\__init__.py", line 443, in LoadLibrary
    return self._dlltype(name)
  File "C:\Python27\lib\ctypes\__init__.py", line 365, in __init__
    self._handle = _dlopen(self._name, mode)
WindowsError: [Error 193] %1 ist keine zulõssige Win32-Anwendung
Run Code Online (Sandbox Code Playgroud)

最后一句用英语表示"%1不是有效的Win32应用程序".

我已经在http://docs.python.org/2/library/ctypes.html#module-ctypes上查了一下,但这并没有为我的问题找到解决方案.

c++ python dll

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

是否有可能从python中的子线程中杀死父线程?

我在Windows上使用Python 3.5.2.

我想运行一个python脚本,但保证它不会超过N秒.如果确实需要超过N秒,则应引发异常,程序应退出.最初我以为我可以在开始时启动一个线程,在抛出异常之前等待N秒,但这只会设置为向计时器线程抛出异常,而不是父线程.例如:

import threading
import time

def may_take_a_long_time(name, wait_time):
    print("{} started...".format(name))
    time.sleep(wait_time)
    print("{} finished!.".format(name))

def kill():
    time.sleep(3)
    raise TimeoutError("No more time!")

kill_thread = threading.Thread(target=kill)
kill_thread.start()

may_take_a_long_time("A", 2)
may_take_a_long_time("B", 2)
may_take_a_long_time("C", 2)
may_take_a_long_time("D", 2)
Run Code Online (Sandbox Code Playgroud)

这输出:

A started...
A finished!.
B started...
Exception in thread Thread-1:
Traceback (most recent call last):
    File "C:\Program Files\Python35\lib\threading.py", line 914, in _bootstrap_inner
    self.run()
    File "C:\Program Files\Python35\lib\threading.py", line 862, in run
    self._target(*self._args, **self._kwargs)
    File "timeout.py", line 11, in …
Run Code Online (Sandbox Code Playgroud)

python time multithreading

6
推荐指数
2
解决办法
2292
查看次数

如何在执行ex命令之前使vim的`:global`命令可以确认?

如何让vim的:global命令询问用户是否要执行ex命令?:substite与使用'c'选项的命令所发生的情况类似%s:Foo:Fighters:gc

我试过了:

:g/mypattern/.s:.*\n::gc
Run Code Online (Sandbox Code Playgroud)

:g/mypattern/s:.*\n::gc
Run Code Online (Sandbox Code Playgroud)

但是如果在下面的线上有匹配则跳跃.例如:

MATCH
NONMATCH
MATCH

MATCH
MATCH
Run Code Online (Sandbox Code Playgroud)

结果是:

NONMATCH

MATCH  <<-- this should be erased.
Run Code Online (Sandbox Code Playgroud)

提示g/FOO/d是完美的.

vim

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