PDA

View Full Version : مشکل با cross thread در C#‎



eurus1
سه شنبه 26 تیر 1397, 15:58 عصر
باسلام خدمت دوستان من 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);
}
}

sds1920
یک شنبه 31 تیر 1397, 08:18 صبح
من در مورد 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();
}