我想在屏幕外渲染一个控件到一些位图,以便我可以快速访问它.
不幸的是,Control.DrawToBitmap
似乎绘制了它所调用的整个控件,包括它的所有子控件.在内部,它向位图发出带有自提供DC的WM_PRINT消息.然后将此临时位图blitting到用户提供的位图.对我来说不可接受,我宁愿根据需要更新这个位图,以便在需要位图时最小化我的性能.
在理想情况下,我希望表单的行为就像它在屏幕上可见(但它不可能).这意味着,如果某个控件的Text
属性发生了变化,则表单将部分失效.然后,捕获相关的消息/事件将允许我为要绘制的表单指定我自己的DC,或者简单地将表单DC BitBlt到我自己的DC.
我看过的一些方向:
PaintEventArgs
参数OnPaint
似乎举行成员savedGraphicsState,也许它可以用来找出不需要无效我试图理解为什么Parallel.For在以下场景中能够胜过许多线程:考虑一批可以并行处理的作业.在处理这些作业时,可能会添加新工作,然后也需要对其进行处理.该Parallel.For
解决方案将如下所示:
var jobs = new List<Job> { firstJob };
int startIdx = 0, endIdx = jobs.Count;
while (startIdx < endIdx) {
Parallel.For(startIdx, endIdx, i => WorkJob(jobs[i]));
startIdx = endIdx; endIdx = jobs.Count;
}
Run Code Online (Sandbox Code Playgroud)
这意味着Parallel.For需要同步多次.考虑面包优先图算法算法; 同步的数量会非常大.浪费时间,不是吗?
尝试使用老式的线程方法:
var queue = new ConcurrentQueue<Job> { firstJob };
var threads = new List<Thread>();
var waitHandle = new AutoResetEvent(false);
int numBusy = 0;
for (int i = 0; i < maxThreads; i++)
threads.Add(new Thread(new ThreadStart(delegate {
while (!queue.IsEmpty || numBusy > 0) { …
Run Code Online (Sandbox Code Playgroud) 我试图用应该做的完全一样的自定义复合视图替换一组视图。具体来说,我经常重复以下布局:
<LinearLayout style="@style/customLayoutStyle">
<Button style="@style/customButtonStyle" />
<TextView style="@style/customTextViewStyle" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
我的目标是用一个替换该块<Highlighter />
。
为此,我在res / layout / highlighter.xml中定义了类似的内容
<merge xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/customLayoutStyle">
<Button android:id="@+id/btnHighlighter" style="@style/customButtonStyle" />
<TextView android:id="@+id/lblHighlighter" style="@style/customTextViewStyle" />
</merge>
Run Code Online (Sandbox Code Playgroud)
在我的自定义视图中,我有类似
public class Highlighter extends LinearLayout {
public Highlighter(Context context, AttributeSet attrs) {
super(context, attrs);
inflate(context, R.layout.highlighter, this);
}
}
Run Code Online (Sandbox Code Playgroud)
这通常可行,但是似乎<merge>
忽略了标签的某些布局参数。此屏幕截图说明了似乎有问题的地方。使用我尝试替换的LinearLayout块的3倍,最下面一行的3张图像已正确对齐。仅左上方的图像使用自定义视图。我的猜测是padding和layout_weight的布局参数丢失了。我是在做错什么,还是需要解决方法?
使用C#/ .NET 4.0我希望以下方案是可行的:
interface IA<out TB> where TB : IB { }
interface IB { }
class A<TB> : IA<TB> where TB : IB { }
class B : IB { }
abstract class AbstractA<TB> : IA<TB> where TB : IB { }
class DerivedA<TB> : AbstractA<TB> where TB : IB { }
static void Main(string[] args) {
var myAB = new A<B>();
Debug.Assert(myAB is IA<B>); // fine
Debug.Assert(myAB is IA<IB>); // fine
var myDerivedAB = new DerivedA<B>();
Debug.Assert(myDerivedAB is …
Run Code Online (Sandbox Code Playgroud) c# ×3
.net-4.0 ×1
android ×1
android-view ×1
android-xml ×1
c#-4.0 ×1
covariance ×1
off-screen ×1
performance ×1
winapi ×1
wm-paint ×1