我在WinForms项目中使用了Model-View-Presenter模式,我遇到的一个问题是当表单告诉演示者做某事然后在演示者去做时没有反应时.幸运的是,在我的项目中,我所有的presenter调用都是异步的,问题是如何做到这一点?
每个演示者调用是否应该包含在新的线程创建中?*
new Thread(()=>_presenter.DoSomething()).Start();
Run Code Online (Sandbox Code Playgroud)
这里最好的做法是什么?如果用户按下"中止您正在做的事情"按钮怎么办?我该如何优雅地流产?
.*实际上我可能只是在演示者上使用某种代理来执行此操作而不是将线程创建放在WinForm中
在我的应用程序中,我有一个管理员角色,这些类型的用户可以更改用户(客户端,经理......)的角色.我正在使用内置的会员提供商.这是我试图做的......
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditRole(string usernameID, FormCollection formValues)
{
var db = new AppDataContext();
var user = db.Users.SingleOrDefault(d => d.UserName == usernameID);
string choosenRole = Request.Form["Roles"];
var tuple = db.UsersInRoles.SingleOrDefault(d => d.UserId == user.UserId);
var roleNameID = db.Roles.SingleOrDefault(d => d.RoleName == choosenRole).RoleId;
tuple.RoleId = roleNameID;
db.SubmitChanges();
return RedirectToAction("Index");
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到了这个错误..
"UsersInRole"类型的对象的成员"RoleId"的值已更改.无法更改定义对象标识的成员.考虑添加具有新标识的新对象并删除现有标识.
我被困了.有任何想法吗?
我有一个像这样的rails helper文件中的方法
def table_for(collection, *args)
options = args.extract_options!
...
end
Run Code Online (Sandbox Code Playgroud)
我希望能够像这样调用这个方法
args = [:name, :description, :start_date, :end_date]
table_for(@things, args)
Run Code Online (Sandbox Code Playgroud)
这样我就可以根据表单提交动态传入参数.我无法重写该方法,因为我在太多地方使用它,我怎么能这样做?
我见过setContentOffset:animated:方法.这是否会滚动到特定位置,或者"偏移"是什么意思?
我正在编写一个PHP脚本,可以动态地将上传的视频文件转换为FLV,但是如果用户在服务器上安装了FFmpeg,我只希望它能够运行该部分脚本.
有没有办法提前发现这个?我是否可以运行FFmpeg命令并测试它是否返回"命令未找到?"
我正在尝试优化我的Delphi类的大小,以便它们占用尽可能少的内存,因为我正在创建大量的内存.
问题是,班级本身很小但他们没有占据我期待的空间.例如,如果我有
type MyClass = class
private
mMember1 : integer;
mMember2 : boolean;
mMember3 : byte;
end;
Run Code Online (Sandbox Code Playgroud)
我期望它使用6个字节,但是,由于对齐它最终使用12个字节,这是布尔值使用4个字节而不是1个字节......对于字节字段也是如此...
对于记录,您可以使用{$ A1}指令或将其声明为打包记录,以使其仅消耗所需的内存.
有什么方法可以用类做同样的事情吗?(也许有关如何正确覆盖NewInstance类方法的一些教程?)
编辑:好的,关于我正在做什么的一点解释......
首先,实际类大小类似于40个字节,包括VMT占用的空间和接口指针.
这些类都继承自一个大小为8字节的基本RefCounting类(一个整数FRefCount和一些允许引用计数的方法),它们必须支持接口(因此根本不使用打包记录).
这些对象被传递并被投射到几个东西,而不知道他们得到了什么.例如,我有一个接收TItems列表的类,并执行以下操作:
if Supports(List[i], IValuable, IValInstance) then
Eval(IValInstance.Value);
Run Code Online (Sandbox Code Playgroud)
然后另一个处理程序可以检查其他接口
If Supports(List[i], IStringObject, IStringInstance) then
Compose(IStringInstance.Value)
Run Code Online (Sandbox Code Playgroud)
这样每个处理程序对List的处理方式都不同......
关于如何获得类的总大小我正在使用修改后的内存管理器,以便我可以跟踪"真实"内存管理器用于该类的内存量.通过这种方式,我非常自信的实例没有被打包.
最后这是在Delphi 7中.我试图使用{$ A1}预编译器指令没有运气,字段以任何方式对齐,并且我可能有几百万个实例作为最坏的情况,因此节省6个字节可能导致几个MB被保存.
是否有一个VB6等同于C/C++'continue'关键字?
在C/C++中,命令'continue'开始循环的下一次迭代.
当然,存在其他等同物.我可以将循环的剩余代码放在if语句中.或者,我可以使用goto.(啊!)
为什么这段代码不打印"测试"?
#include <stdio.h>
#include <stdlib.h>
void foo ( void ) {
printf("test\n");
}
__declspec(naked)
void bar ( void ) {
asm {
push 0x000FFFFF
call malloc
pop ecx
push eax
add eax, 0x000EFFFF
mov ecx, esp
mov esp, eax
push ecx
call foo
pop esp
call free
pop ecx
ret
}
}
int main(int argc, char* argv[])
{
bar();
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试为一个图形类创建一个构造函数,它接受一个字符串作为参数并使用它来构建图形.
字符串的格式如下:|vertex list|Edges list|
例如|1,2,3,4,15|(1->2),(3->2),(4->15)|
我们的想法是构造函数将从字符串中获取值,然后知道执行以下操作(将顶点插入顶点列表,然后将边插入边列表):
addVertex(1)
addVertex(2)
addVertex(3)
addVertex(4)
addVertex(15)
addEdge(1,2)
addEdge(3,2)
addEdge(4,15)
Run Code Online (Sandbox Code Playgroud)
我本来只是做了几个"for"循环来扫描字符串,但我不知道如何处理双(或更多)数字.我开始想象各种严重复杂的循环,我想知道是否有人可以与我分享任何更智能的方法来提取和使用这些数据.
我想根据文件中包含给定字符串的行数设置变量.
就像是:
set isComplete = 0
%isComplete% = find /c /i "Transfer Complete" "C:\ftp.LOG"
IF %isComplete% > 0 ECHO "Success" ELSE ECHO "Failure"
Run Code Online (Sandbox Code Playgroud)
要么:
set isComplete = 0
find /c /i "Transfer Complete" "C:\ftp.LOG" | %isComplete%
IF %isComplete% > 0 ECHO "Success" ELSE ECHO "Failure"
Run Code Online (Sandbox Code Playgroud)
显然,这些选项都不起作用.
谢谢.
c ×2
.net ×1
arguments ×1
arrays ×1
asp.net-mvc ×1
assembly ×1
batch-file ×1
c# ×1
c++ ×1
casting ×1
cocoa-touch ×1
command ×1
delphi ×1
ffmpeg ×1
find ×1
integer ×1
iphone ×1
memory ×1
methods ×1
mvp ×1
optimization ×1
parsing ×1
php ×1
ruby ×1
stack ×1
string ×1
uikit ×1
uiscrollview ×1
vb6 ×1
version ×1
winforms ×1
x86 ×1