我知道,当从任何非UI线程操作UI控件时,您必须封送对UI线程的调用以避免问题.一般的共识是您应该使用测试InvokeRequired,如果为true,则使用.Invoke来执行封送处理.
这会导致很多代码看起来像这样:
private void UpdateSummary(string text)
{
if (this.InvokeRequired)
{
this.Invoke(new Action(() => UpdateSummary(text)));
}
else
{
summary.Text = text;
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:我可以省略InvokeRequired测试并只调用Invoke,如下所示:
private void UpdateSummary(string text)
{
this.Invoke(new Action(() => summary.Text = text));
}
Run Code Online (Sandbox Code Playgroud)
这样做有问题吗?如果是这样,是否有更好的方法来保持InvokeRequired测试,而不必在整个地方复制和粘贴此模式?
我有一个包含分层数据的类.我想使用嵌套转发器在我的ASP.net webapp中显示这些数据.我该怎么做呢?我只做了一个级别的嵌套,我怎么说五个级别?
每个项目可以有零个或多个子项目.我基本上只是在使用一些CSS的东西缩进每个分段.我不想使用treeview控件,我想严格坚持使用转发器.
更新:
我的数据来自数据库.我有一个带有一些基本属性的数据表.
Item
{
ID,
Name,
Description,
...
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个多对多的表:
Parent
{
ParentID,
ChildID
}
Run Code Online (Sandbox Code Playgroud)
我正在遍历每个项目并展示它的孩子; 和它的孩子的孩子.我认为这最好用嵌套的中继器完成,但我可能是错的.
我正在玩java8 lambdas,我遇到了编译器错误,我没想到.
假设我有一个函数interface A,一个abstract class B和一个class C重载方法,它们可以采用A或B作为参数:
public interface A {
void invoke(String arg);
}
public abstract class B {
public abstract void invoke(String arg);
}
public class C {
public void apply(A x) { }
public B apply(B x) { return x; }
}
Run Code Online (Sandbox Code Playgroud)
然后我可以传入一个lambda c.apply,它正确地解决了c.apply(A).
C c = new C();
c.apply(x -> System.out.println(x));
Run Code Online (Sandbox Code Playgroud)
但是当我更改B作为泛型版本的参数的重载时,编译器报告两个重载是不明确的.
public class C {
public void apply(A x) { …Run Code Online (Sandbox Code Playgroud) 如果catch和finally块都抛出异常会发生什么?
另一个标题可能是:检查是否存在多行?
使用SQL和C#的组合,如果列表中的所有产品都存在于表中,我希望方法返回true.如果它可以在SQL中完成,那将是更好的选择.我编写了一个方法,productID使用以下SQL 返回单个是否存在:
SELECT productID FROM Products WHERE ProductID = @productID
Run Code Online (Sandbox Code Playgroud)
如果返回一行,则c#方法返回true,否则返回false.
现在我想知道我是否有产品ID清单(不是一个很大的清单,通常在20岁以下).如果所有产品ID都存在则如何编写将返回一行的查询,如果一个或多个产品ID不存在则如何不返回行?
(Maybe something involving "IN" like:
SELECT * FROM Products WHERE ProductID IN ('1', '10', '100', 'ABC'))
Run Code Online (Sandbox Code Playgroud)
编辑:
如何表达结果对我来说并不重要.无论查询返回1or 0,空结果集还是非空结果集,true或false都无关紧要.我更喜欢这样的答案:1)易于阅读和理解,2)高效
我想要将产品ID列表与SQL连接起来.显然,这会打开SQL注入代码(产品ID实际上是varchar.在这种情况下,机会很小但仍然希望避免这种可能性).所以如果有办法解决这个问题会更好.使用SQL Server 2005.
产品ID是 varchar
我尝试使用lambda函数sort,但是出现了"Segmentation fault"错误.我设法将代码简化为以下内容:
#include <iostream>
#include <algorithm>
int main()
{
const int len = 18;
int intArr[len];
for (int i=0;i<len;i++) intArr[i]=1000+i;
// The following is expected to sort all but the last element of the array
std::sort(intArr, intArr + len -1, [](int a, int b)
{
std::cout<<"("<<a<<", "<<b<<")\n";
return (a<b?-1:(a>b?1:0));
});
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我使用在Ubuntu 11.04(x64)中编译并运行此代码
g++ -std=gnu++0x test2.cpp && ./a.out.
它会打印很多对形式(large_integer,1008),一对(0,1008)和退出"Segmentation fault".
我需要一些可以从DLL文件(C#.NET代码)生成PDB的东西,有没有免费程序可以做到这一点?
在G ++ 中用C++ 0x Lambda Expression玩弄了一下,我想知道在不使用lambda函数的情况下,与一般/特定情况相比,性能有多好.
有没有人知道一个或多或少全面的关于lambda表达性能的讨论或者在开发过程中应该避免使用它们的情况?
我正在尝试使用lambda作为静态成员,如下所示:
struct A
{
static constexpr auto F = [](){};
};
int main()
{
A::F();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是否是正确的C++ 11代码?在clang上,我收到此错误:
error: constexpr variable 'F' must be initialized by a constant
expression
static constexpr auto F = [](){};
^~~~~~
Run Code Online (Sandbox Code Playgroud)
似乎在铿锵声中,lambdas不被视为常数表达.它是否正确?也许他们还没有在clang中完全实现lambdas,因为gcc 4.7似乎允许它作为a constexpr,但是它给出了另一个错误:
error: ‘constexpr const<lambda()> A::F’, declared using local type ‘const<lambda()>’, is used but never defined
Run Code Online (Sandbox Code Playgroud)
我不确定,我明白这意味着什么.它似乎正确地推断出lambda的类型,但它只声明它而不是定义它.我该如何定义它?
我想在业余时间从事编程项目,并想知道是否有一个项目可以帮助科学界以某种方式?
c# ×5
c++ ×3
c++11 ×3
lambda ×3
.net ×2
debugging ×2
java ×2
asp.net ×1
benchmarking ×1
boolean ×1
conditional ×1
constexpr ×1
disassembly ×1
exception ×1
exists ×1
generics ×1
invoke ×1
java-8 ×1
open-source ×1
pdb-files ×1
performance ×1
repeater ×1
sql ×1
try-finally ×1