static请教

没花鹿 2011-09-21 10:38:17
一个解决方案里有3个项目,其中第一个项目中有:
public static class PublicClass
{
public static int CountI = 0;
}

另外2个项目中都引用了第一个项目,于是,另外的2个项目都能(而且也确实执行下面代码了):
PublicClass.CountI++;

问题是,第一个项目中使用 PublicClass.CountI 时,却依旧是 0(初始值),咋回事?(我想要的值是:2)
...全文
212 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
没花鹿 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 vrhero 的回复:]
静态字段是线程不安全的...你没有做线程同步当然不可能同步得到最新数据...

ps:C#没有全局变量的概念...
[/Quote]多谢,结帖
vrhero 2011-09-21
  • 打赏
  • 举报
回复
静态字段是线程不安全的...你没有做线程同步当然不可能同步得到最新数据...

ps:C#没有全局变量的概念...
没花鹿 2011-09-21
  • 打赏
  • 举报
回复
试了,还不行,怪了,呵呵。(回19楼)
没花鹿 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 zyloveyrf 的回复:]
那我就把我的话说完 看来LZ忙啊

在窗体的FormClosed事件 也就是窗体关闭之后
PublicClass.CountI++;
在其他地方不错更改
我测试通过了 LZ没通过的话就奇怪了
[/Quote]是在,我感觉应该行的,但。。。我再试试。。。
没花鹿 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 zyloveyrf 的回复:]
引用 11 楼 resigner 的回复:
引用 7 楼 resigner 的回复:
引用 4 楼 zyloveyrf 的回复:
LZ 你在项目一中public static int CountI = 0;
这句话是干什么的?
试过的,不行。
回4楼,赋初值


C# code




private void Exit_AdminForm_Click(object s……
[/Quote]是的
但是,我这样处理一下就可以:
PublicClass里加入PublicClass.CountI++;就行:(另外2处删除掉)



public static void createProcess(string filename, string arguments)
{
Process Business = new Process();
Business.StartInfo.FileName = filename;
Business.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
Business.StartInfo.CreateNoWindow = true;
Business.StartInfo.Arguments = arguments;
Business.Start();
PublicClass.CountI++;
//Business.WaitForExit();
}
zsl3118062 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zyloveyrf 的回复:]
LZ 你在项目一中public static int CountI = 0;
这句话是干什么的?
[/Quote]
11
萧炎 2011-09-21
  • 打赏
  • 举报
回复
那我就把我的话说完 看来LZ忙啊

在窗体的FormClosed事件 也就是窗体关闭之后
PublicClass.CountI++;
在其他地方不错更改
我测试通过了 LZ没通过的话就奇怪了
F0X_OO7 2011-09-21
  • 打赏
  • 举报
回复
卧槽,C#有全局变量??

[Quote=引用 13 楼 qweeew 的回复:]

public static int CountI = 0;
定义成全局变量吧,写外面。
[/Quote]
萧炎 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 resigner 的回复:]
引用 7 楼 resigner 的回复:
引用 4 楼 zyloveyrf 的回复:
LZ 你在项目一中public static int CountI = 0;
这句话是干什么的?
试过的,不行。
回4楼,赋初值


C# code




private void Exit_AdminForm_Click(object sender, EventArg……
[/Quote]

LZ这两个是关闭窗口的操作吗?
没花鹿 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 zyloveyrf 的回复:]
引用 12 楼 resigner 的回复:
回8楼,就11楼2次改变变量值

没理由 LZ你加我Q 453367672 帮你解决
[/Quote]多谢了,上班中,整QQ不太方便呀
没花鹿 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 qweeew 的回复:]
public static int CountI = 0;
定义成全局变量吧,写外面。
[/Quote]我这样定义已经算作全局变量了吧
萧炎 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 resigner 的回复:]
回8楼,就11楼2次改变变量值
[/Quote]
没理由 LZ你加我Q 453367672 帮你解决
qweeew 2011-09-21
  • 打赏
  • 举报
回复
public static int CountI = 0;
定义成全局变量吧,写外面。
没花鹿 2011-09-21
  • 打赏
  • 举报
回复
回8楼,就11楼2次改变变量值
没花鹿 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 resigner 的回复:]
引用 4 楼 zyloveyrf 的回复:
LZ 你在项目一中public static int CountI = 0;
这句话是干什么的?
试过的,不行。
回4楼,赋初值
[/Quote]



private void Exit_AdminForm_Click(object sender, EventArgs e)
{
PublicClass.CountI++;
Close();
}





private void button1_Click(object sender, EventArgs e)
{
PublicClass.CountI++;
Close();
}
fangshaoshen 2011-09-21
  • 打赏
  • 举报
回复
第一个项目中使用 PublicClass.CountI 时,却依旧是 0

说明你第一个项目使用 PublicClass.CountI 时 它的值还没有被改变。
没花鹿 2011-09-21
  • 打赏
  • 举报
回复
我在关闭另外2个项目Close()前都++了,在Close()后,那个变量的值在第一个项目里却没变
我姓区不姓区 2011-09-21
  • 打赏
  • 举报
回复
代码太少,看不出问题来,你搜一下都有哪些地方给CountI赋值了
没花鹿 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zyloveyrf 的回复:]
LZ 你在项目一中public static int CountI = 0;
这句话是干什么的?
[/Quote]试过的,不行。
回4楼,赋初值
萧炎 2011-09-21
  • 打赏
  • 举报
回复
静态类 最常用的就是窗体间传值

正常情况下:
在项目1中++
再在项目2中++
在项目再次用得到的应该是2
只要你没有在其他地方改变CountI的值
加载更多回复(5)

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧