public abstract class AbstractWeb
{
protected Hashtable _links; public Hashtable Links
{
get { return _links; }
} #region Protect Helper Methods
protected void GetPage()
{
_links = new Hashtable();
// _links.Clear();
// InitLinks();
Thread t = new Thread(new ThreadStart(InitLinks));
t.Start();
} protected string GetHtmlCode(string url)
{
return GetHtmlHelper.GetHtml(url);
}
#endregion #region Abstract Methods
protected abstract void InitLinks();
#endregion
} /// <summary>
/// 招職網
/// </summary>
public class JobSeeker:AbstractWeb
{
public JobSeeker()
{
GetPage();
} #region Protected Method
/// <summary>
///初始化職業相關鏈接
/// </summary>
protected override void InitLinks()
{
string splitStart = "http://www.jiujik.com/jscommunity.php?communitycode=";
string htmlCode = base.GetHtmlCode("http://www.jiujik.com/jshome_b5.html");
int startIndex = htmlCode.IndexOf(splitStart);
int length = htmlCode.IndexOf("更多......</a></td>") - startIndex;
htmlCode = htmlCode.Substring(startIndex, length); //獲得職業類型的代碼
string splitEnd = "</a></td>";
while (htmlCode.IndexOf(splitStart) != -1)
{
startIndex = htmlCode.IndexOf(splitStart);
length = htmlCode.IndexOf(splitEnd) - startIndex;
string kindUrl = htmlCode.Substring(startIndex, length);
htmlCode = htmlCode.Replace(kindUrl + splitEnd, "");
string[] url = kindUrl.Split(new string[] { "\">" }, StringSplitOptions.None);
_links.Add(url[1], url[0]); 這裏的_links有值
}
}
#endregion
}
AbstractWeb k = new JobSeeker();
foreach (DictionaryEntry entry in k.Links)這裏的k.Links為什麽拿不到值呢?
{
textBox1.Text += entry.Value + "\r\n";
}
問題為紅色字
{
protected Hashtable _links; public Hashtable Links
{
get { return _links; }
} #region Protect Helper Methods
protected void GetPage()
{
_links = new Hashtable();
// _links.Clear();
// InitLinks();
Thread t = new Thread(new ThreadStart(InitLinks));
t.Start();
} protected string GetHtmlCode(string url)
{
return GetHtmlHelper.GetHtml(url);
}
#endregion #region Abstract Methods
protected abstract void InitLinks();
#endregion
} /// <summary>
/// 招職網
/// </summary>
public class JobSeeker:AbstractWeb
{
public JobSeeker()
{
GetPage();
} #region Protected Method
/// <summary>
///初始化職業相關鏈接
/// </summary>
protected override void InitLinks()
{
string splitStart = "http://www.jiujik.com/jscommunity.php?communitycode=";
string htmlCode = base.GetHtmlCode("http://www.jiujik.com/jshome_b5.html");
int startIndex = htmlCode.IndexOf(splitStart);
int length = htmlCode.IndexOf("更多......</a></td>") - startIndex;
htmlCode = htmlCode.Substring(startIndex, length); //獲得職業類型的代碼
string splitEnd = "</a></td>";
while (htmlCode.IndexOf(splitStart) != -1)
{
startIndex = htmlCode.IndexOf(splitStart);
length = htmlCode.IndexOf(splitEnd) - startIndex;
string kindUrl = htmlCode.Substring(startIndex, length);
htmlCode = htmlCode.Replace(kindUrl + splitEnd, "");
string[] url = kindUrl.Split(new string[] { "\">" }, StringSplitOptions.None);
_links.Add(url[1], url[0]); 這裏的_links有值
}
}
#endregion
}
AbstractWeb k = new JobSeeker();
foreach (DictionaryEntry entry in k.Links)這裏的k.Links為什麽拿不到值呢?
{
textBox1.Text += entry.Value + "\r\n";
}
問題為紅色字
不太清楚
方法一:
IDictionaryEnumerator enumerator = thProduct.GetEnumerator();
while (enumerator.MoveNext())
{
arrKey.Add( "@ "+enumerator.Key.ToString()); // Hashtable关健字
arrValue.Add(enumerator.Value.ToString()); // Hashtable值
} 方法二:
using System.Collections;
HashTable objHasTab;
// Setting values to objHasTab
foreach (DictionaryEntry objDE in objHasTab)
{
Console.WriteLine(objDE.Key.ToString());
Console.WriteLine(objDE.Value.ToString());
}
protected override void InitLinks()
{
string splitStart = "http://www.jiujik.com/jscommunity.php?communitycode=";
string[] url = splitStart.Split('c');
_links.Add(url[1], url[0]); //這裏的_links有值
}
//Hashtable objHasTab = (Hashtable)k.Links;
// Setting values to objHasTab
foreach (DictionaryEntry objDE in k.Links)
{
Console.WriteLine(objDE.Key.ToString());
Console.WriteLine(objDE.Value.ToString());
} 就取到了, 看来 是 InitLinks() 你需要查查
private void Button_click( object sender,event e)
{
thread t=new thread(show)
t.start();
}private void show()
{
form1 frm=new form1();
frm.show(); //這裏窗體根本就不顯示出來,這個是什麽問題呢??我覺得就跟我上邊的遇到的一樣.
}
我们可以将show方法转化为showdialog方法,顾名思义,showdialog是一个进行路经绑定的show方法,他是不可以自由切换的,换言之,就是,当你没有关闭你当前页的前提下,你是无法关闭该页面后面的任一页面的,它是当前唯一(路经打开)为true的。
而show方法由于未进行绑定,它所显示的各个窗口、对话框是可以相互切换,而不需要关闭当前窗口、对话框。但是他由于未进行绑定,所以每个由show方法打开的窗口的顺序是非固定的,如果遇到什么问题,由show方法打开的窗口的顺序可能会有很大的改变! show()仅仅是显示出来窗口界面而已```也就是和你执行的结果在同一窗口显示```所显示的窗口可以在后台运行```而showDialog()是一个对话框窗口界面```执行结果以新窗口界面出现```不允许进行后台运行```就是你想编辑什么的时候```非得先关闭showDialog()窗口界面才可以进行其他操作``` 这就是它们的一点小区别了``` show()是非模式窗体.
showDialog()是模式窗体.
区别在于,以showDialog()打开的窗体,要等窗体关闭后才能操作其他窗体.而show()则不受此限制. 这是最经常的区别了,
还有一个我个人使用的心得,你可以了解 比如你先打开子窗体,想隐藏主窗体。
如果这个时候用Show的话,则会发生的事情是,打开子窗体的同时主窗体又显示出来,而使用ShowDialog()的时候主要当子窗体关闭的时候主窗体才会显示。
简单代码如下:
Form2 f2 = new Form2();
this.Visible = false;
f2.ShowDialog();
this.Visible= true;
这就是模态对话框的与Show的区别。
樓上何解,把開始線程寫到FormShown????
麻煩你再幫我看下我的貼子,我主要是處理hashTable,為什麽拿不到值,就是因為開了線程,如果用單線程,就不會有這些問題了..
这时 _links中一个值也没有,然后你就foreach了
试试在foreach之前对线程的状态进行判断,如果线程执行完了 在获取值