مشکل با cross thread در C#
باسلام خدمت دوستان من cefsharp رو نصب کردم و باهاش کار میکنم وقتی که مقدار دهی میکنم و پردازشم تموم میشه میخوام تو تیک تایمر مرورگر رو در تیک تایمر که داخل یه کنترا تب اضافه کردمش پاک کنم ولی با مشکل crros thread مواجه شدم متاسفانه نتونستم به جواب درستی برسم ممنون میشم راهنماییم کنید.
public void InitializeChromium()
{
settings = new CefSettings();
// Initialize cef with the provided settings
Cef.Initialize(settings);
// Create a browser component
chromeBrowser = new ChromiumWebBrowser("");
chromeBrowser.Load(SearchValue);
// Add it to the form and fill it to the form window.
web_tab.Controls.Add(chromeBrowser);
web_tab.Text = "Thread";
WebControler.TabPages.Add(web_tab);
//this.Controls.Add(chromeBrowser);
chromeBrowser.Dock = DockStyle.Fill;
chromeBrowser.LoadingStateChanged += ChromeBrowser_load_complate;
}
قسمتی که تایمر تیک میخوره
private void BrowserTimer_Tick(object sender, EventArgs e)
{
if(Task_Status==true)
{
WebControler.TabPages.Remove(web_tab);
}
}
نقل قول: مشکل با cross thread در C#
من در مورد CefSharp چیزی نمیدونم ولی معمولا مشکل Cross Thread زمانی رخ میده که شما از درون یک Thread غیر از ترد اصلی برنامه سعی در تغییر UI برنامه دارید. بهتره این مواقع از متد Invoke استفاده کنید.
کلمه this در کد زیر اشاره یک Form داره.
private void BrowserTimer_Tick(object sender, EventArgs e)
{
var method = (MethodInvoker)(() =>
{
if (Task_Status == true)
{
WebControler.TabPages.Remove(web_tab);
}
});
if (this.InvokeRequired)
this.Invoke(method);
else
method.Invoke();
}