C#现成中弹出MessageBox,委托,为什么总是错误呢?

privatevoidbutton1_Click(objectsender,EventArgse){Threadt=newThread(do1);t.IsBackgrou... private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(do1);
t.IsBackground=true;
t.Start();
}
void do1()
{
Thread b = new Thread(do2);
b.IsBackground = true;
b.Start();
}
void do2()
{
DialogResult dr = DialogResult.No;

box("这是消息内容",ref dr);

if (dr == DialogResult.Yes)
MessageBox.Show("Yes");
else
MessageBox.Show("No");
}
delegate void boxdelegate(string msg, ref DialogResult dr);
void box(string msg,ref DialogResult dr)
{
if (this.InvokeRequired)
{
boxdelegate d = box;
this.Invoke(d, msg,dr);
}
else
{
dr = MessageBox.Show(msg, "", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk);
}
}

代码中,无论怎么搞,到最后总是弹出No, 单步调试看了,在box中虽然改变了dr的值为Yes,但是再一次执行的时候就变成No了
或者 像这种让用户选择是或否的Messagebox还有没有其他的好办法呢?
主要是这个box方法,执行完弹出消息框之后会再次执行,这个时候就变成No了,
其他的方法是可以在外部定义DialogResult 不用ref这样就行。
展开
 我来答
匿名用户
2013-08-31
展开全部
dr设为公共变量,在窗口类里设置dr,不要在函数里设置。不然函数结束,变量的生命周期便会结束。正如你说的,再次执行的时候因为函数的周期结束,dr变量也会被清空。如果你设置在整个窗口的变量就不会有这个问题了。
追问
private void button2_Click()
{
int i = 0;
test(ref i);
Text = i.ToString();
}
void test( ref int i)
{
i = new Random().Next(1000,10000);
}
可以改变窗体标题的呀,不为0,ref用法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-08-31
展开全部
在box中是改变了dr的值为Yes,但是第二次,执行的时候,又会到初始状态;

你如果想让程序记住状态,你可以设一个中间变量试试
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式