string x1;
Dispatcher.Invoke(new Action (() => x1 = lbl1.Content.ToString()));
ï¼ˆæˆ‘è¿™æ ·åšæ˜¯å› 为我使用线程) (然åŽå½“我å°è¯•åœ¨ifä¸ä½¿ç”¨å®ƒæ—¶ï¼‰
if(x1 == "X"){}
(我收到错误,说我使用的是未分é…çš„å˜é‡ï¼‰
有人å¯ä»¥å‘Šè¯‰æˆ‘ä¸ºä»€ä¹ˆä¼šè¿™æ ·å—?
ç”案 0 :(得分:2)
请å‚阅:
string x1; // <- Just declared, not assigned
// x1 is assigned, but in the different thread
Dispatcher.Invoke(new Action (() => x1 = lbl1.Content.ToString()));
// it may occure, that the diffrent thread hasn't finished yet, and
// x1 is still unassigned; that's why the compiler shows the warning
if(x1 == "X"){}
但是,在æŸäº›æƒ…况下,编译器ä¸èƒ½è·Ÿè¸ªåˆ†é…,例如
String x1;
Action f =
() => { x1 = "X"; };
f(); // <- x1 will be assigned here
// Compiler erroneously warns here that x1 is unassigned,
// but x1 is assigned
if (x1 == "X")
ç”案 1 :(得分:1)
 ÂC#编译器ä¸å…许使用未åˆå§‹åŒ–çš„å˜é‡ã€‚如果   编译器检测到å¯èƒ½æ²¡æœ‰çš„å˜é‡çš„使用   åˆå§‹åŒ–,它会生æˆç¼–译器错误
您声明了x1
å˜é‡ï¼Œä½†æœªå¯¹å…¶è¿›è¡Œåˆå§‹åŒ–。å¯èƒ½éœ€è¦åˆå§‹åŒ–它,如;
string x1 = "";
或
string x1 = null;
ç”案 2 :(得分:1)
å½“ä½ åƒè¿™æ ·åˆ†é…x1æ—¶
string x1;
Dispatcher.Invoke(new Action (() => x1 = lbl1.Content.ToString()));
您在ä¸åŒçš„线程上分é…x1ï¼Œä½†ç¼–è¯‘å™¨æ— æ³•æ£€æµ‹åˆ°æ‚¨çš„å˜é‡å·²åˆ†é…。
å°è¯•è®¾ç½®x1的默认值,以解决问题
String x1 = "";
希望有所帮助
ç”案 3 :(得分:0)
编译器没有æ„识到您æ£åœ¨åˆ†é…x1ï¼Œå› ä¸ºè¿™ä¸æ˜¯ä¸€ä¸ªç®€å•çš„分é…。 å› æ¤ï¼Œåªéœ€æ›´æ”¹æ¤è¡Œï¼š
string x1 = null; // or assign a different default value
ç”案 4 :(得分:0)
由于您在å¦ä¸€ä¸ªçº¿ç¨‹ä¸æŒ‡å®šx1
ï¼Œå› æ¤ä¸»çº¿ç¨‹x1
ä¸çš„åŽŸå› æœªåˆ†é…
您å¯ä»¥åœ¨å£°æ˜Žnull
x1
分é…ç»™x1
æ¥æ›´æ£æ¤é—®é¢˜
string x=null;
ç”案 5 :(得分:0)
x1
。 x1
。 x1
。现在,活动的顺åºæ˜¯ä»€ä¹ˆï¼Ÿä¼š1 > 3> 2
å—?为什么编译器应该å‡è®¾ï¼Ÿ
如果它是1 >2 >3
,则æ„味ç€æ‚¨åœ¨åˆ†é…之å‰å°è¯•ä½¿ç”¨x1
,这就是编译器所抱怨的。