Сделайте это:
label.text = [NSString stringWithFormat:@"%d", count];
Одно из возможных решений - использовать [ThreadStatic].
http://msdn.microsoft.com/en-us/library/system.threadstaticattribute (VS.71) .aspx
Он сделает вашу статику на поток. Однако есть каветы, поэтому вам следует проверить их.
Каждый запрос к сайту asp.net поступает и обрабатывается в собственном потоке. Но каждый из этих потоков принадлежит одному и тому же приложению. Это означает, что все, что вы помечаете как статическое, используется для всех запросов и, следовательно, для всех сеансов и пользователей.
В этом случае функция MyFunc
, которая является частью вашего класса страницы, копируется поверх статического Элемент Func
в A
с каждым page_init, поэтому каждый раз, когда любой пользователь выполняет page_init, он заменяет на A.Func
, используемый все запросы.
Статические данные распределяются между всем доменом приложения вашего веб-приложения. Короче говоря, он разделяется между всеми потоками, обслуживающими запросы в вашем веб-приложении, он никоим образом не привязан к сеансу / потоку / пользователю, а к веб-приложению в целом. (В отличие, например, от php, где каждый запрос находится в своей собственной изолированной панели среды предусмотрено несколько регуляторов, например, переменная сеанса.)
Я не буду пытаться улучшить объяснения статических членов в других ответах, но хочу указать другой способ кодирования вашей непосредственной проблемы.
В качестве решения вы может создать экземплярно-ориентированную версию вашего класса A
, сохранить ее в переменной уровня страницы и передать ее конструктору Q
при загрузке страницы:
public class MyPage: Page {
private A2 _a2;
// I've modified A2's constructor here to accept the function
protected Page_Init() { this._a2 = new A2(MyFunc); }
protected Page_Load() {
Q myQ = new Q(this._a2);
// etc..
}
}
Фактически , если нет настоятельной необходимости объявлять A2
ранее, вы можете просто создать его экземпляр при создании своего экземпляра Q
в Page_Load
.
Изменить: , чтобы ответить на вопрос, который вы подняли в других комментариях, причина того, что переменные являются общими, заключается в том, что запросы используют один и тот же делегат, который имеет только одну копию своих переменных. См. Джона Скита '
Если вы хотите, чтобы данные сохранялись только для текущего запроса, используйте HttpContext.Items
:
http://msdn.microsoft.com/en-us/library/system.web.httpcontext.items.aspx
Если вы хотите, чтобы данные сохранялись для сеанса текущего пользователя (при условии, что у вас включено состояние сеанса ) используйте HttpContext.Session
:
http://msdn.microsoft.com/en-us/library/system.web.httpcontext.session.aspx