我正在爲在線遊戲製作機器人。 它可以工作,但它是單線程應用程序。webClient Bot - 多線程
我想讓它成爲多線程應用程序。 我知道背景工作者是如何工作的。
對於我所有的任務,我使用一個Web客戶端添加Cookie支持。
我例如需要打開一個頁面,等待10分鐘,然後執行下一條指令。 我也希望能夠隨時停止機器人。
我是否必須將我的WebClient對象傳遞給後臺工作人員才能使用? 什麼是更新我的表單上的控件的最佳方式?
我有一個類具有我想要在主窗體上顯示的所有值。 我應該在財產改變時發生一些事件嗎?如果是的話,你能舉個例子嗎?
UPDATE:
這是我的特別的WebClient:
using System;
using System.Net;
namespace Game_Bot
{
class WebClientEx : WebClient
{
public CookieContainer CookieContainer { get; private set; }
public WebClientEx()
{
CookieContainer = new CookieContainer();
}
public void ClearCookies()
{
CookieContainer = new CookieContainer();
}
protected override WebRequest GetWebRequest(Uri address)
{
var request = base.GetWebRequest(address);
if (request is HttpWebRequest)
{
(request as HttpWebRequest).CookieContainer = CookieContainer;
}
return request;
}
}
}
正在更新UI的這個好辦法嗎?或者有任何的煩惱?
public void SetStatus(string status)
{
if (TransferLeftLabel.Dispatcher.Thread == Thread.CurrentThread)
{
TransferLeftLabel.Text = status;
}
else
{
TransferLeftLabel.Dispatcher.BeginInvoke(DispatcherPriority.Normal,
(Action)(() => { SetStatus(string status); }));
}
}
如果你想比一個線程的工作比較多,我建議你使用線程改爲手動的'BackgroundWorker'控制。 – 2011-04-22 08:48:27
使用手動線程,您還可以發送所需的任何狀態更新(通過在主線程上調用委託並檢查InvokeRequired)。 Backgroundworker僅支持向用戶界面報告百分比。 – 2011-04-22 08:52:13
@Vladislaw正好。 – 2011-04-22 09:11:37