У меня была аналогичная проблема с использованием класса зависимостей Oracle, который работает в своем потоке в Winforms,
Когда событие OnChange запускалось из Oracle Dependency, я хотел показать изменения в DataGridView, просто установив DataSource в eventargs. Подробности (который по существу является DataTable), и он бросает: System.InvalidOperationException не был обработан кодом пользователя. Message = Работа с кросс-потоками недействительна: Control 'dataGridView1' обращается к потоку, отличному от потока, на котором он был создан.
Пользователь StackOverflow Брайан Пейрис (bpeiris@gmail.com), мой коллега показал мне так:
void dep_OnChange(object sender, OracleNotificationEventArgs arg)
{
Console.WriteLine("Notification received");
int infoSum = int.Parse(arg.Details.Compute("Sum(Info)", "Info is not null").ToString());
InfoSum x = (InfoSum)infoSum;
foreach (DataRow dr in arg.Details.Rows)
{
Console.WriteLine(string.Format("Operation(InfoSum)= {0}", Enum.GetName(typeof(InfoSum), x)));
Console.WriteLine(string.Format("ontable={0} Rowid={1},info={2}", dr.Field<string>("ResourceName"), dr.Field<string>("rowid"), dr.Field<Int32>("info")));
}
// Following will throw cross-thread
// dataGridView1.DataSource = arg.Details;
// instead of line above use the following
dataGridView1.BeginInvoke((Action)(()=>dataGridView1.DataSource = arg.Details));
IsNotified = true;
}
}
Вы можете просто использовать директиву [innerHTML]
для этого.
http://plnkr.co/edit/6x04QSKhqbDwPvdsLSL9?p=preview
import {Component, Pipe} from '@angular/core'
@Component({
selector: 'my-app',
template: `
Hello my name is <span [innerHTML]="myName"></span>
`,
})
export class AppComponent {
myName='<strong>Pardeep</strong>';
}
Обновление:
Я проверил это не работает таким образом после выхода RC.1 .
Допустим, чтобы заставить его работать с RC.4 , вы можете использовать DomSanitizationService
, как показано ниже,
@Component({
selector: 'my-app',
template: `
<div [innerHTML]="myCheckbox"></div>
`,
})
export class AppComponent {
dangerousUrl='<input type="checkbox">';
constructor(sanitizer: DomSanitizationService) {
this.myCheckbox= sanitizer.bypassSecurityTrustHtml(this.dangerousUrl);
}
}
http://plnkr.co/edit / Yexm1Mf8B3FRhNch3EMz? р = предварительный просмотр