这是几个小时,我被困在显然似乎是一个非常愚蠢的问题,我不能前进.
基本上,如果我尝试在ASP.NET Web窗体页的任何事件处理程序(即在Page_Load)中评估以下内容:
ScriptManager.GetCurrent ( Page ).IsInAsyncPostBack
Run Code Online (Sandbox Code Playgroud)
我总是得到以下错误:
'System.Web.UI.IScriptManager'不包含'GetCurrent'的定义,并且没有扩展方法'GetCurrent'接受类型'System.Web.UI.IScriptManager'的第一个参数(你是否缺少using指令?或汇编参考?)
但是,如果我在任何嵌入式UserControls事件中评估相同,我会得到一个返回的布尔值.
我错过了一些非常基本的东西吗?!
谢谢,
朱塞佩
我正在尝试将作为对象传递的参数(它是IEnumerable类型的对象的向上)传递给IEnumerable,其中Foo实现了IFoo.
这是我想做的一个例子,但它不起作用.
public void F(object o)
{
//I know the object o is of type IEnumerable<Foo> where Foo implements IFoo
IEnumerable<IFoo> ifoos = (IEnumerable<IFoo>) o);
}
Run Code Online (Sandbox Code Playgroud)
有工作吗?我不想让函数F Foo具体,但我无法将其转换为接口,除非我这样做:
IEnumerable<IFoo> ifoos = (IEnumerable<Foo>) o).Select( f => (IFoo) f);
Run Code Online (Sandbox Code Playgroud)
谢谢
朱塞佩
我可能遗漏了一些非常基本的东西,但我无法弄清楚为什么我得到某个代码的编译错误而且我没有用几乎相同的代码得到它.
所以我在这里得到一个错误:
//parent.GetChildren() returns a IEnumerable<IBase>
F1<T>(T parent, Func<string, T, string> func) where T: IBase
{
F1(parent.GetChildren(), func);
//This would wok instead:
//F1(parent.GetChildren().Select(c=> (T)c), func);
}
F1<T>(IEnumerable<T> children, Func<string, T, string> func) where T: IBase
{
...
}
Run Code Online (Sandbox Code Playgroud)
但我不在这里:
//parent.GetChildren() returns a IEnumerable<IBase>
F1<T>(T parent, Func<string, string, string> func) where T: IBase
{
//Works, no casting required
F1(parent.GetChildren(), func);
}
F1<T>(IEnumerable<T> children, Func<string, string, string> func) where T: IBase
{
...
}
Run Code Online (Sandbox Code Playgroud)
基本上,如果我在传递的参数函数中使用泛型Type T作为其参数之一,我会得到以下编译错误:
错误1:' ConsoleApplication1.Program.FooConsumer.Consume1<ConsoleApplication1.Program.IBase>(System.Collections.Generic.IEnumerable<ConsoleApplication1.Program.IBase>, string, System.Func<string,ConsoleApplication1.Program.IBase,string>)' 的最佳重载方法匹配包含一些无效参数 …
以下代码是可重入的吗?
它是否是线程安全的,如果this.NextToExecuteIndex声明private int NextToExecuteIndex = 0;并且不在其他地方计算?
protected override void Poll(object sender, System.Timers.ElapsedEventArgs e)
{
int index;
object locker = new object();
lock (locker)
{
Interlocked.Increment(ref this.NextToExecuteIndex);
if (this.NextToExecuteIndex >= this.ReportingAgentsTypes.Count())
{
this.NextToExecuteIndex = 0;
}
index = this.NextToExecuteIndex;
}
var t = this.ReportingAgentsTypes[index];
Console.WriteLine(t.ToString());
}
Run Code Online (Sandbox Code Playgroud) 我正在读一本名为Java和C的书:关键差异,为Java开发人员学习Objective-C.(我的背景是C#/ Java所以指针和管理内存的概念对我来说是新的,所以请耐心等待)
在第2章中,它解释了这个例子的指针:
int i = 1;
int *iptr;
iptr = &i;
*iptr = 2;
Run Code Online (Sandbox Code Playgroud)
我理解上面,其中*iptr是一个指针,它分配了内存位置i,也是从指针iptr我们可以访问的值iptr指向的*iptr语法.
在本书的下方还有以下片段:
//..
NSMutableString *z = [[[NSNutableString alloc]init] autorelease];
[z appendString:@"Zombie "];
//...
Run Code Online (Sandbox Code Playgroud)
根据我对第2章的理解,该行[z appendString:@"Zombie "]应该是[*z appendString:@"Zombie "],因为我们希望实际的NSMutableString,而不是它的指针,被发送消息appendString!我知道我错了,有些东西我错过了,请指出正确的方向.
非常感谢,
朱塞佩
我正在构建一个Windows服务基类来管理轮询任何待处理任务的计划表并运行它们.
Windows服务正在使用它System.Timers.Timer来启动计划的表轮询.
我ThreadPool.SetMaxThread在初始化定时器之前将其设置为10.
protected override void OnStart(string[] args)
{
ThreadPool.SetMaxThreads(10, 10);
this._Timer = new System.Timers.Timer();
this._Timer.Elapsed += new ElapsedEventHandler(PollWrapper);
this._Timer.Interval = 100;
this._Timer.Enabled = true;
}
Run Code Online (Sandbox Code Playgroud)
计时器调用的委托方法保留正在运行的线程的计数,以便可以在OnStop()方法中使用它来等待每个线程在处置服务之前完成.
private void PollWrapper(object sender, ElapsedEventArgs e)
{
numberOfRunningThreads++;
try
{
this.Poll(sender, e);
}
catch (Exception exception)
{
//some error logging here
}
finally
{
numberOfRunningThreads--;
}
}
protected override void OnStop()
{
this._Timer.Enabled = false;
while (numberOfRunningThreads > 0)
{
this.RequestAdditionalTime(1000);
Thread.Sleep(1000);
}
}
Run Code Online (Sandbox Code Playgroud)
通常,当我尝试从Windows服务管理控制台停止服务时,服务不会停止.如果我调试它并向OnStop()方法添加断点,我可以看到它不是因为numberOfRunningThreads卡在大于0的数字上(通常远大于10!).没有任务正在运行,它永远保留在该号码上!
首先,我不明白这个数字怎么可能大于10,尽管它ThreadPool.SetMaxThreads应该限制在10?
其次,即使我没有设置最大线程数,我也期望PollWrapper的finally块最终将计数恢复为0.如果计数器保持大于0,则只能用finally块来解释执行,对吧!?怎么可能? …
c# ×4
.net ×2
casting ×2
generics ×2
asp.net ×1
c ×1
interface ×1
javascript ×1
objective-c ×1
parameters ×1
pointers ×1
reentrancy ×1
timer ×1
updatepanel ×1